1

我正在尝试平滑形态操作。我已经在图像1上完成了4 * 4侵蚀和4 * 4扩张(我尽最大努力实现侵蚀和扩张)。然后,我检测到最大的斑点来滤除噪音。然后我的下一步是平滑形象操作的图像2,这样我就可以填补图像轮廓内的空白。 我使用下面的代码段来填补使用aforge的差距。但是这种方法不会返回填充AForge.net的孔不工作

public Bitmap fillGap(Bitmap image) 
     { 

      FillHoles filter = new FillHoles(); 
      filter.MaxHoleHeight = 5; 
      filter.MaxHoleWidth = 5; 
      filter.CoupledSizeFiltering = false; 
      filter.Apply(image); 
      return image; 
     } 

我的下一步是纠正它的方法是什么?

Skin Detected Image Morphological Image

回答

1

根据该API documentation,所述Apply方法离开源图像不变。无论是更换你的方法的最后两行:

return filter.Apply(image); 

或使用ApplyInPlace方法,而不是Apply

filter.ApplyInPlace(image); 
return image; 

BTW,是MaxHoleHeightMaxHoleWidth集到足够大的价值?

+0

仍功能不起作用。有没有图像格式(8bbp)丢失? – TNC 2012-08-02 20:21:39

+0

根据FillHoles类文件,图像必须是8bpp二进制,是的。我真的没有太多的经验与自己的图书馆,放在安全的一面,也许你可以创建一个源图像的克隆,并在克隆图像上应用FillHoles过滤器? 'var clonedImg = Image.Clone(image,PixelFormat.Format8bppIndexed);'。我不确定这是否足以让图像易受FillHoles滤镜影响,但至少值得一试? – 2012-08-02 20:44:18

+0

也许你还需要在'FillHoles'过滤器之前应用'Threshold'过滤器。看看[this](http://stackoverflow.com/q/11005067/650012)SO问题。 – 2012-08-02 20:49:46