我有这个图像,我想删除背景以隔离绿色图片。背景不是完全黑色,而是包含一些像素,这些像素具有与绿色图片内的其他像素相同的颜色。 我用过这个
private void ButtonFilterClick(object sender, EventArgs e)
{
PixelFormat pxf = PixelFormat.Format24bppRgb;
Bitmap bitmap = ((Bitmap)(_smartLabForm.pictureBox1.Image));
Rectangle rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
BitmapData bmpData =
bitmap.LockBits(rect, ImageLockMode.ReadWrite, pxf);
IntPtr ptr = bmpData.Scan0;
int numBytes = bmpData.Stride * bitmap.Height;
byte[] rgbValues = new byte[numBytes];
Marshal.Copy(ptr, rgbValues, 0, numBytes);
for (int counter = 0; counter < rgbValues.Length; counter += 3)
{
if (rgbValues[counter] < 15 &&
rgbValues[counter + 1] < 15 &&
rgbValues[counter + 2] < 15)
{
rgbValues[counter] = 255;
rgbValues[counter + 1] = 255;
rgbValues[counter + 2] = 255;
}
}
Marshal.Copy(rgbValues, 0, ptr, numBytes);
bitmap.UnlockBits(bmpData);
_smartLabForm.Refresh();
}
我得到的是这个:
如何删除&#34;噪音&#34;保持不损坏绿色图片而不影响性能? 谢谢?
答案 0 :(得分:1)
这实际上是计算机视觉中一个非常复杂的主题(image segmentation)。涵盖先进技术将过于宽泛。但是这里可以快速而简单地完成工作:
将阈值提高到足以使所有背景像素都低于它。当检查是否应该移除像素时,还将特定邻域中的所有像素(例如,圆形半径)与阈值进行比较。只有在全部低于阈值时才会将其删除。
这样,当您靠近要素区域时,可以不那么激烈地移除像素。