3

MATLABでハフ変換を行った後、2 つ以上の画像を比較できるように線を選択するにはどうすればよいですか?

Amro の例に従いましたが、実際に検出したかったのは、最初の図の 2 行です。しかし、私が手に入れたのは2番目の写真のものです。これどうやってするの?

代替テキスト

代替テキスト

4

1 に答える 1

4

2つの画像を比較するのではなく、画像内の線を検出することが目標だったと思います(?)。

とにかく、関数によって生成されたハフ変換行列の最大強度を見つけるために、hough関数を使用し、houghpeaks検出するために必要な数のピークを渡します。


編集1:

手順を示す例を追加すると思いました。

%# Load image, process it, find edges
I  = rgb2gray( imread('pillsetc.png') );
I = imcrop(I, [30 30 450 350]);
J = imfilter(I, fspecial('gaussian', [17 17], 5), 'symmetric');
BW = edge(J, 'canny');

%# Perform Hough transform and show matrix
[H,T,R] = hough(BW);
imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, ...
       'InitialMagnification','fit')
xlabel('\theta (degrees)'), ylabel('\rho')
axis on, axis normal, hold on
colormap(hot), colorbar

%# Detect peaks
P  = houghpeaks(H, 4);
plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2);

%# Detect lines and overlay on top of image
lines = houghlines(BW, T, R, P);
figure, imshow(I), hold on
for k = 1:length(lines)
    xy = [lines(k).point1; lines(k).point2];
    plot(xy(:,1), xy(:,2), 'g.-', 'LineWidth',2);
end
hold off

アキュムレータ行列 線が重なった画像


EDIT2:

最近の更新に続いて、上記の同じコードにいくつかの変更を加えるだけで、行を検出することができました。

  • この地域を次のようにトリミングしました。[200 70 160 140]
  • sigma=3の11x11ガウスフィルターを使用しました

注:元の画像の線の位置を切り抜かないようにするには、オフセットを追加する必要があります。また、より正確な結果が必要な場合は、以下に示すように、4つの線を検出して、中央の線を取得することをお勧めします。

4つの囲み線

于 2009-12-29T15:43:57.553 に答える