我有一张图片(左图),但它的边缘有一些折扣和噪音。我想使用一种可以给我正确图像的方法(过滤、图像修复等)。有什么方法可以在 Matlab 中为我做到这一点吗?
问问题
1064 次
1 回答
3
根据您的需要,一系列膨胀和腐蚀操作(称为“关闭”)可能就足够了。您可以组合imdilate
andimerode
操作,按顺序执行它们imclose
,或“手动”,如本例所示:
se=strel('ball',4,4);
im_er = imdilate(im,se);
im_er = imerode(im_er,se);
该imdilate
操作增加了高值像素的区域,第二次缩小了它们。有各种形状的对象可以用来执行腐蚀/膨胀,您可能需要试验或阅读哪种形状对您的场景最有用。
在您的特定情况下,看起来 RGB 颜色空间可以执行形态学操作。使用上述操作(两个膨胀和一个腐蚀)将红色圆圈渲染为蓝色(中帧)后,我得到了您的图像(左帧)的结果(右帧):
显然,这并没有删除一些不需要的功能,但它似乎修复了其中的大部分。在图像膨胀的某些部分存在残留的白色像素,仅使用一个通道或在不同的颜色空间(例如 HSV)中工作可能是一种解决方法。
最后,您似乎还希望将操作限制在红色圆圈包围的“感兴趣区域”(ROI),因为您应该查看其他关于 SO 的问答帖子,例如此处或此处(搜索“matlab罗”)。
编辑
对于应用以下变形的 OPs 新图像:
se=strel('ball',4,4);
im_er = imdilate(im,se);
im_er = imdilate(im_er,se);
im_er = imerode(im_er,se);
se=strel('ball',3,3);
im_er = imerode(im_er,se);
结果如下图:
注意:要获得更好的结果,请使用 roi 函数!
于 2013-08-07T09:54:57.003 回答