2017-01-21 24 views
1

この画像を生成するためにMATLABを使用しました(bwareaopenを使用)。真ん中には私は2D楕円体を持っています。どのように私はそれの周囲のすべての "ノイズ"をクリアし、明確な楕円体を得ることができますか?BW画像のノイズ除去

enter image description here

元画像

enter image description here

+0

ただ、好奇心から - これは海で、いくつかの船のですか? –

+0

@ Dev-iL確かに1つのように見えます... –

+0

私はいくつかのアイデアを持っていますが、いくつかの画像を提供してください。 –

答えて

3

は、このソリューションを見てください。私は犬を使用したコメントで述べたように - ガウス

の違いは、犬が何を意味するのでしょうか?

まず、2つの別々のカーネルでイメージの2つの別々のガウス分布を取る必要があります。 (ガウス分布は、ガウスぼけを適用することを意味します)。 2つの結果の相違点は、DoGと呼ばれます。

これは私がやったことである:

  • グレースケールに与えumageを変換さ:

enter image description here

  • そしてIは、エッジを保存するバイラテラルフィルタリングを適用し非エッジを滑らかにする:

enter image description here

(あなたが熱心に見ている場合は、違いを見ることができます)。

  • アプライド上記画像にガウスぼかし

enter image description here

  • 次にこれを得るために、上記の二つの画像とのDoGを行う:(Iは、単に2枚の画像を差し引きます上記)

enter image description here

  • そしてIは、セルのエッジを強化するために楕円カーネルを用いモルフォロジー演算を行う:

enter image description here

  • 画像の周りに不要な斑点を除去するために私は中央値フィルタリングを実行し、最後にDこの:

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

を試してみてください。コード –

+0

が欲しいかどうか尋ねてください。あなたがコードを共有することができれば、私は多くを感謝します – elyraz

+0

Matlabコードの可能性はありますか? – user2916044

関連する問題