2

私はこのような回転した画像を持っています:ここに画像の説明を入力してください

私がやりたいのは、画像の端を見つけることです。つまり、この画像に見られるような赤いエッジを見つけたいと思います。 ここに画像の説明を入力してください

最初と最後のゼロ以外の要素を見つけて、それらをエッジの座標として使用しようとしました。これは問題ありませんが(実際に機能させることができれば)、「太い」境界線を取得するために赤い境界線を拡張する必要がある可能性があるため、拡張できません。基本的に、回転した画像の端で発生する効果を移動する必要があるため、境界線を見つけようとしています。誰かが私を適切な答え(バウンディングボックスの線に沿ったものなど)の方向に向けることができれば、私はそれを大いに感謝します!

編集@Jonasの提案 に従って、私の編集を回答に移動しました。

4

2 に答える 2

2

やや適切な答えを見つけました。ユーザーParagのアドバイスから、私は画像を2値化しました(0より大きいもの)。次に、Sobelエッジ検出を適用しました。これにより、画像のエッジを持つ2値画像が作成され、必要に応じて形態学的拡張を使用して境界線を「拡張」します。

私が使用したコード:

I = imread('outputTest.jpg');
B = I;
B(B > 0) = 255;
BW = edge(B,'sobel');
SE = strel('rectangle', [5 5]);
BW = imdilate(BW,SE);
I2 = I;
I2(BW > 0) = 0;

Paragが述べているように、画像を2値化することはこれを解決するための最も堅牢な方法ではありませんが、画像を表示する前に画像が形成される方法により、少なくとも私の場合はこれで十分だと確信しています。

于 2013-02-25T11:24:00.977 に答える
0

簡単な方法は、回転角を使用して回転画像の角を計算することです。

于 2015-01-25T17:08:57.577 に答える