【问题标题】:Remove noise in an image去除图像中的噪点
【发布时间】:2013-08-08 06:16:39
【问题描述】:

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

【问题讨论】:

  • 我怀疑 matlab 中是否存在单一的方法或函数。
  • @Marcin:有什么方法可以做到这一点?或任何纸
  • 抱歉,暂时想不到。
  • watershed segmentationh-maxima transform 怎么样?
  • @fpe:他们能做这样的操作吗?因为我不想分割我的图像

标签: matlab image-processing pattern-matching computer-vision pattern-recognition


【解决方案1】:

根据您的需要,一系列膨胀和腐蚀操作(称为“关闭”)可能就足够了。您可以组合imdilateimerode 操作,按imclose 的顺序执行它们,或者像本例中那样“手动”执行:

se=strel('ball',4,4); 
im_er = imdilate(im,se);
im_er = imerode(im_er,se);

imdilate 操作增加了高值像素的区域,第二次缩小了它们。有多种形状的对象可以用来执行腐蚀/膨胀,您可能需要试验或阅读哪种形状对您的场景最有用。

在您的特定情况下,看起来 RGB 颜色空间可以执行形态学操作。使用上述操作(两次膨胀和一次腐蚀)将红色圆圈渲染为蓝色(中间帧)后,我得到了您的图像(左帧)的结果(右帧):

显然,这并没有删除一些不需要的功能,但它似乎修复了大部分。在图像膨胀的某些部分存在残留的白色像素,仅使用其中一个通道或使用不同的颜色空间(例如 HSV)可能是一种解决方法。

最后,您似乎还希望将操作限制在红色圆圈包围的“感兴趣区域”(ROI),因为您应该查看 SO 上的其他问答帖子,例如 here 或 @ 987654322@(搜索“matlab roi”)。

编辑

对于应用以下变形的 OP 新图像:

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 函数!

【讨论】:

  • tnx 为您解答。实际上我只是用那些红色圆圈来显示改进,它们不是图像的一部分!如果需要,我可以单独上传原图
  • 你可以这样做,我可以快速浏览一下,看看有什么可以补充的。
  • 我添加了原图。
  • @Sam 请使用您的原始图像查看结果。
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 2016-12-05
  • 2013-09-28
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
相关资源
最近更新 更多