Remove noise in BW image

谁都会走 提交于 2019-12-11 06:14:56

问题


I used MATLAB to generate this image (using bwareaopen). In the middle I have a 2D ellipsoid. How can I clear all the "noise" surrounding of it and get a clear ellipsoid?

original image


回答1:


Have a look at this solution. As mentioned in the comments I used DoG - Difference of Gaussians

What does DoG mean ?

First you have to take two separate Gaussians of an image with two separate kernels. (By Gaussian I mean apply ing gaussian blur). The difference of the two resultants is called the DoG.

This is what I did:

  • Converted the given umage to gray scale:

  • Then I applied bilateral filtering to preserve edges and smoothen non-edges:

(If you look intently you can see the difference).

  • Applied Gaussian blur to the above image:

  • Now performed DoG with the above two images to obtain this: (I merely subtracted the two images above)

  • Then I performed Morphological operation using the ellipse kernel to enhance the edge of the cell:

  • To remove the unwanted speckles around the image I performed median filtering and finally obtained this:

You can refine this process to get an enhance image .

EDIT:

Here is the code I used:

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


来源:https://stackoverflow.com/questions/41776655/remove-noise-in-bw-image

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!