删除非红色色调像素

cgo*_*gon 10 c# image-processing

我有一个非常简单的图像处理应用程序.

我试图删除不涉及红色调的像素.

到目前为止,基本代码似乎实现了我想要的.

        private void removeUnRedCellsBtn_Click(object sender, EventArgs e)
        {
            byte threshold = Convert.ToByte(diffTxtBox.Text); 
            byte r, g, b;
            for (int i = 0; i < m_Bitmap.Width; i++)
            {
                for (int j = 0; j < m_Bitmap.Height; j++)
                {
                    r = im_matrix[i, j].R;
                    g = im_matrix[i, j].G;
                    b = im_matrix[i, j].B;
                    if ((r - b) < threshold || (r - g) < threshold)
                    {
                        m_Bitmap.SetPixel(i, j, Color.White);
                    }

                }
            }
            pictureArea_PictureBox.Image = m_Bitmap;
        }
Run Code Online (Sandbox Code Playgroud)

基本上,如果(红色和蓝色)或(红色和绿色)的差异小于阈值,则将像素设置为白色.

我的结果似乎很有希望,但我想知道是否有更好的解决方案来确定像素是否涉及红色调.

我的阈值为75的结果是 之前 后

任何算法或思想都将非常感激.

提前致谢

matlab imtool

Mik*_*nor 7

如果将RGB值转换为不同的颜色空间(如HSL或HSV),您可能会有更多的运气.查看维基百科上的此链接.将像素转换为其中一个颜色空间可以帮助您隔离色调,这是您最关心的问题.

  • 您还需要考虑饱和度和亮度,即使在新的色彩空间中 - 仅通过色调判断还不够. (2认同)