4

宿題の一部としてこんにちは。Sobel Edge検出を使用して、画像balls1.tifのエッジの大きさの画像とエッジの方向の画像を計算して表示する必要があります。

matlabのエッジ関数は使用しないでください。conv2を使用できます。強いエッジピクセル(しきい値を超える)のバイナリエッジ画像(1エッジピクセル、0エッジなし)を表示します。ボールの影をなくすしきい値を決定します。

これが私のmain.mです

addpath(fullfile(pwd,'TOOLBOX'));
addpath(fullfile(pwd,'images'));

%Sobel Edge Detection 
Image = readImage('balls1.tif');
showImage(Image);
message = sprintf('Sobel Edge Detection');
sobelEdgeDetection(Image);
uiwait(msgbox(message,'Done', 'help'));
close all

これが私のSobeEdgeDetection.mです

function [ output_args ] = SobelEdgeDetection( Image )

maskX = [-1 0 1 ; -2 0 2; -1 0 1];
maskY = [-1 -2 -1 ; 0 0 0 ; 1 2 1] ;

resX = conv2(Image, maskX);
resY = conv2(Image, maskY);

magnitude = sqrt(resX.^2 + resY.^2);
direction = atan(resY/resX);
thresh = magnitude < 101;
magnitude(thresh) = 0;
showImage(magnitude);

end

私の質問は次のとおり
です。1。私はどの方向に使用されますか?どうすれば表示できますか?
2.ボールの影を取り除くためのしきい値を取得するためのより良い方法はありますか。試行錯誤しました…。

ここに画像の説明を入力してください

これらは、マグニチュードを示す限り、私の結果です。

ここに画像の説明を入力してください

4

2 に答える 2

1

これがあなたの最初の質問に対する答えです:

Sobelエッジ検出アルゴ。得られる方向は基本的に勾配です。

画像処理の勾配は、強度の変化が最大になる方向として定義されます。変化は、強度の増加または強度の減少である可能性があります。また、この変化はピクセルごとに計算されます。これは、ピクセルごとに強度の最大変化が測定されることを意味します。resX(質問の例では、SobelEdgeDetection.m)は、X方向の変更を示し、resYはY方向の変更を定義します。

Matlabのコマンドウィンドウでこのコマンドを実際に実行するだけです。imshow(resX);

また、imshow(resY)を試してください

于 2013-01-24T17:52:27.320 に答える
1

宿題の2番目の部分によると、あなたはそれを解決しました。つまり、あなたは影を取り除きました。

最初の質問:方向はさまざまな方法で使用できます。最も簡単な方法は次のとおりです。それを使ってきれいな写真を作成します。これを検討するより有用な理由は、非最大抑制を実行している場合ですが、手動で実行していないため、すぐに使用することはあまりありません。グラデーション方向の結果を視覚化するには、検討する各方向の色を設定するだけです。視覚化をさらに単純化するために、方向を0から始めて30度の増分で180まで減らすことも想定します。このように、たとえば35度の方向がある場合、それを30度と見なします(最も近いため)縮小リストに1つ)。

ここに画像の説明を入力してください ここに画像の説明を入力してください

通常、適切なしきい値を自動的に決定することは簡単な作業ではありません。たとえば、大津の方法で提供されるものから始めて、解決しようとしている問題に応じて、他のヒストグラム分析に基づいてその値を増減することができます。

于 2013-01-24T21:02:06.097 に答える