我有一张图片(左图),但边缘有一些折扣和噪音。我想使用一种可以给我正确图像的方法(过滤,图像修复等)。有没有什么方法可以在Matlab中为我做这个?
答案 0 :(得分:3)
根据您的需要,一系列扩张和侵蚀操作(称为“关闭”)可能就足够了。您可以合并imdilate
和imerode
操作,按顺序执行imclose
或“手动”,如下例所示:
se=strel('ball',4,4);
im_er = imdilate(im,se);
im_er = imerode(im_er,se);
imdilate
操作会增加高值像素的区域,第二个会缩小它们。有各种形状的物体用于执行侵蚀/扩张,您可能需要试验或阅读哪种对您的场景最有用。
在您的特定情况下,看起来RGB色彩空间可以执行形态学操作。在使用上述操作(两次扩张和一次侵蚀)渲染红色圆圈蓝色(中间框架)后,我得到了你的图像(右边框)的结果(右边框):
显然,这并没有删除一些不需要的功能,但它似乎解决了大部分功能。在图像扩张的某些部分中存在残留的白色像素,仅使用其中一个通道或在不同的颜色空间(例如HSV)中使用可能是一种解决方法。
最后,您还希望将操作限制为红色圆圈所包含的“感兴趣区域”(ROI),因为您应该检查SO上的其他Q& A帖子,例如{{3 }或here(搜索“matlab roi”)。
修改强>
对于应用以下变形的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函数!