1

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

在此处输入图像描述

原始图像

在此处输入图像描述

4

1 回答 1

3

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

狗是什么意思?

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

这就是我所做的:

  • 将给定的 umage 转换为灰度

在此处输入图像描述

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

在此处输入图像描述

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

  • 对上图应用高斯模糊

在此处输入图像描述

  • 现在用上面两幅图像进行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()   
于 2017-01-21T17:51:18.257 回答