2017-07-16 8 views
1

私は、Canny Edge Detection機能、Hough Transform、画像内の特定のエッジのセットを選択するためのマスクについて学びました。Canny関数を適用する場合は、まずマスクを適用できますか?

私は、人々が最初に2つの機能を適用し、マスクを2番目に適用したことを知りました。最初にマスクを適用するとパフォーマンスが向上するでしょうか?

Canny関数とハフ変換をマスク領域に適用するのは、領域全体に適用し、マスク領域を選択するよりも高速です。しかし、おそらく私は誤解しています。

私はそれが適切かどうかはわかりませんが、私はPythonとOpenCVライブラリを使用しています。私は、その機能が画像のサブセットで動作できないことを認識しています。しかし、なぜそうなのか理解したいと思います。

+0

あなたはまずマスクを適用しますか?あなたがcannyの入力でマスクされていないピクセルを黒くすると、マスクされたボーダーで多くのエッジが得られます。あなたが望むものであるかどうかは分かりません... – Micka

答えて

3

はい、最初にマスクを適用できますが、これは真剣にサブパルスの結果をもたらします。

import numpy as np 
import matplotlib.pyplot as plt 
import scipy 
from skimage import feature 

# Create image 
image = scipy.misc.face(gray=True) 
plt.figure() 
plt.imshow(image, cmap='gray') 
plt.title('image') 

# Create a simple mask 
x, y = np.mgrid[:image.shape[0], :image.shape[1]] 
mask = (x > 200) & (x < 500) & (y > 300) & (y < 700) 
plt.figure() 
plt.imshow(image * mask, cmap='gray') 
plt.title('masked image') 

# Find edges with both methods 
edges1 = feature.canny(image, sigma=3) 
edges1 *= mask 

plt.figure() 
plt.imshow(edges1, cmap='gray') 
plt.title('Mask then find edges') 

masked_image = image * mask 
edges2 = feature.canny(masked_image, sigma=3) 

plt.figure() 
plt.imshow(edges2, cmap='gray') 
plt.title('Find edges then mask') 

これらの結果を与える:

たとえば、次のコードを検討しますが、マスク場合は、エッジを適用する前にどのように、

enter image description here enter image description here enter image description here enter image description here

をお知らせこの奇妙なフレームを取得します。これは、マスキングが最初からそこになかった新しいエッジを作成するためです。

+0

私は見ています。あなたがそれを書き込もうとすれば、この「フレーム」のために赤いボックスが得られますか? –

+1

はい、それはあなたが得るものです。あなたのマスクが長方形の場合、画像のその部分集合を抽出し、エッジ検出器を別々に適用することができます。 –

+1

すごくお答えいただき、ありがとうございます! –

関連する問題