1

我有一张图片(左图),但它的边缘有一些折扣和噪音。我想使用一种可以给我正确图像的方法(过滤、图像修复等)。有什么方法可以在 Matlab 中为我做到这一点吗?

4

1 回答 1

3

根据您的需要,一系列膨胀和腐蚀操作(称为“关闭”)可能就足够了。您可以组合imdilateandimerode操作,按顺序执行它们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 回答