去除BW图像中的噪点

时间:2017-01-21 07:06:31

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

-->

我使用MATLAB生成此图像(使用bwareaopen)。在中间我有一个2D椭圆体。如何清除所有"噪音"围绕它并得到一个清晰的椭圆体?

enter image description here

原始图片

enter image description here

1 个答案:

答案 0 :(得分:3)

看看这个解决方案。正如评论中提到的,我使用了 DoG - 高斯差异

DoG是什么意思?

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

这就是我所做的:

  • 将给定的umage转换为灰度

enter image description here

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

enter image description here

(如果你仔细观察,你可以看到差异)。

  • 高斯模糊应用于上图:

enter image description here

  • 现在使用以上两张图片执行 DoG 以获取此信息:(我只是减去上面的两张图片)

enter image description here

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

enter image description here

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

enter image description here

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

修改

以下是我使用的代码:

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()