【问题标题】:Remove noise in BW image去除 BW 图像中的噪点
【发布时间】:2023-04-10 04:31:01
【问题描述】:

我使用 MATLAB 生成此图像(使用 bwareaopen)。在中间我有一个二维椭球。如何清除它周围的所有“噪音”并获得清晰的椭球体?

原图

【问题讨论】:

  • 只是出于好奇 - 这是海上的某艘船吗?
  • @Dev-iL 确实看起来像一个......
  • 我有一些想法,但请您再提供几张图片进行测试?
  • 这是一个单元格,我添加了原始图像。欢迎任何其他想法。由于背景颜色,我无法获取单元格边界/轮廓。
  • 尝试使用高斯差分(DoG)

标签: matlab image-processing noise-reduction binary-image


【解决方案1】:

看看这个解决方案。正如我使用的 cmets 中提到的那样 DoG - 高斯差异

DoG 是什么意思?

首先,您必须对具有两个单独内核的图像获取两个单独的高斯函数。 (高斯我的意思是应用 高斯模糊)。两个结果的差异称为DoG

这就是我所做的:

  • 将给定的图像转换为灰度

  • 然后我应用双边过滤来保留边缘并平滑非边缘:

(如果您仔细观察,您会发现差异)。

  • 对上图应用高斯模糊

  • 现在用上面两张图进行DoG得到这个:(我只是减去上面两张图)

  • 然后我使用椭圆内核执行形态学运算来增强单元格的边缘:

  • 为了去除图像周围不需要的斑点,我执行了中值滤波,最后得到了:

您可以优化此过程以获得增强图像。

编辑:

这是我使用的代码:

import cv2

filename = 'Cell.jpg'
img = cv2.imread(filename)
cv2.imwrite('img.jpg',img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite('gray.jpg',gray)

bi = cv2.bilateralFilter(gray,7,75,75)
cv2.imwrite('bi.jpg',bi)
blur = cv2.GaussianBlur(bi,(3,3),0)
cv2.imwrite('blur.jpg',blur)
blur1 = cv2.GaussianBlur(bi,(17,17),0)
dog = blur1 - bi
cv2.imwrite('DoG.jpg',dog)

kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
close = cv2.morphologyEx(dog, cv2.MORPH_CLOSE, kernel, 13)
cv2.imwrite('close.jpg',close)

median = cv2.medianBlur(close,3)
cv2.imwrite('median.jpg',median)

cv2.waitKey(0)
cv2.destroyAllWindows()   

【讨论】:

  • 非常令人印象深刻。如果您能分享代码,我将不胜感激
  • 不幸的是,我不使用 MATLAB。但只需按照答案中提到的步骤操作即可。以上所有步骤都有内置函数。
  • 有没有办法关闭 python-openCV 中的对象,这样我就可以得到椭球轮廓?谢谢
  • 我实际上尝试了形态关闭操作,但没有成功。您可以查看THIS PAGE 了解其他选项。
  • @user2788464 我还建议在尝试上述代码之前对图像进行一些预处理。尝试均衡化局部自适应直方图均衡化
猜你喜欢
  • 2013-08-08
  • 1970-01-01
  • 2016-12-05
  • 2013-09-28
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
相关资源
最近更新 更多