【发布时间】:2019-07-25 08:59:09
【问题描述】:
我在使用 HSI 提取图像时遇到问题,问题出在色调上。
我尝试裁剪图像并提取为灰度,但在 HSI 上仍有问题
private void rGBToHSIToolStripMenuItem_Click(object sender, EventArgs e) {
Bitmap org = (Bitmap)pictureBox1.Image.Clone(); //ghi anh da open gan vao bien org, ghi vao bo nho
Bitmap output1 = new Bitmap(org.Width, org.Height);
//dua ra anh ouput voi kich thuoc tuong tu anh da nhap la org
for (Byte y = 0; y < output1.Height; y++)
//thuc hien lap cho y chay tu o den chieu cao anh
{
for (Byte x = 0; x < output1.Width; x++)
//thuc hien lap cho x chay tu 0 den chieu rong
{
Color c = org.GetPixel(x, y);
Double h=0;
Byte r = Convert.ToByte(c.R/(c.R + c.G + c.B));
Byte g = Convert.ToByte(c.G / (c.R + c.G + c.B));
Byte b = Convert.ToByte(c.B / (c.R + c.G + c.B));
Byte s = Convert.ToByte(1 - 3 * Math.Min(r, Math.Min(g, b)));
Byte k = Convert.ToByte((c.R + c.G + c.B) / (3 * 255));
if (b<=g)
{
h = Convert.ToDouble((Math.Round((1 / Math.Cos((0.5 * (2 * r - g - b)) / (Math.Sqrt(((r - g) * (r - g) + (r - b) * (g - b)))))))));
}
else
{
h = Convert.ToDouble((Math.Round((2 * 3.14 - 1 / Math.Cos((0.5 * (2 * r - g - b)) / (Math.Sqrt(((r - g) * (r - g) + (r - b) * (g - b)))))))));
}
Byte s1 = Convert.ToByte((s * 100));
Byte k1 = Convert.ToByte((k * 255));
Byte h1 = Convert.ToByte(((h * 180 / 3.14)));
output1.SetPixel(x, y, Color.FromArgb(h1, s1, k1));
}
我想解决我的代码的色调问题,结果可以提取图像到HSI图像
【问题讨论】:
标签: c# visual-studio emgucv