2016-04-29 5 views

答えて

0

は、エッジを強調するためにキャニー輪郭検出前シャープフィルタを使用してみてください。

+0

ようこそスタックオーバーフロー!これは理論的に質問に答えるかもしれませんが、答えの本質的な部分をここに含め、参照のためのリンクを提供することが望ましいです(// meta.stackoverflow.com/q/8259)。 – manetsus

+0

こんにちはkalyf-abdalla、あなたの提案に感謝しますが、私はそれが通常のグレーレベルの画像ではないと言う必要があります。つまり、すべての領域が特定のグレーレベル(内部にバラツキがない)境界が非常によく定義されているので、私はシャープネスを適用することが私の場合には役に立たないと思う。とにかく、ありがとう、私のポイントを理解していただければ幸いです。 –

1

私の経験では、Cannyエッジ検出アルゴリズムは、低解像度画像を処理するために使用されるときに、一般にこの種のアーティファクトを残します。奇妙なことに、画像のサイズを単純に大きくする(たとえば、双線形補間を使用する)ことで、より良い結果を得ることができます。あなたが使っているツールはわかりませんが、OpenCVでは単純なresize関数を使ってこれを行うことができます。もちろん、

enter image description here

あなたが密接に見れば、あなたはまだいくつかの小さなギャップが表示されます:4倍の幅と高さを大きくすることで、私は次のような境界を得ることができます。 morphological transformationsを使用するように対処する1つの解決策です。例えば、私は、上記画像を形態学的に近い操作を使用している場合、これはギャップを接続するのに役立ちます:

enter image description here

それはあなたのエッジ画像は、白地に黒の縁のように見えることから、あなたがすることは注目に値しますおそらく代わりに形態学的なオープン操作を使用する必要があります。

また、Canny操作のしきい値が低いと、状況によっては表示されているギャップの種類に影響を与えることもあります。より計算量の多い手法を試す前に、欠落しているエッジを取り込めるかどうかを確かめるために、低いスレッショルドを下げることをお勧めします。

+0

こんにちは@ Aenimated1 あなたのアプローチはうまくいきます。私が従う手順は次のとおりです: グレー= cv2.imread( 'image.tif'、0) big = cv2.resize(グレー、(4 *グレー。シェイプ[0]、4 *グレー。シェイプ[1] )) エッジ= cv2.Canny(big、5,10) w、h = edges.shape r = 500.0/h dim =(500、int(w * r)) small = cv2.resize(edges薄暗い、補間= cv2.INTER_AREA) 小さな=〜小さな 小さな[小さな<250] = 0 io.imsave( 'small2.tif'、小)今 、私は、私が望んだおかげで、ハイメ –

+0

それがうまくいってうれしい。入力画像の性質を考えると、より簡単なアルゴリズムを検討する価値があるかもしれません。基本的には、入力画像に隣接するピクセルの値が異なる場合はいつでも、エッジを描画するだけです。私はOpenCV関数がそれをサポートしているかどうかはわかりませんが、書くのは簡単で、より速いオーダーです。 – Aenimated1

+0

ちょっと@ Aenimated1、私はそのように考えていない、この新しいアプローチは非常に簡単で高速です。私も試してみます。あなたのアイデアはいつでも歓迎されます。ボックスを考えて、いくつかの人々は言う。 –

関連する問題