7

だから私はこのようなイメージを持っています:

CG生成バスルーム

私はこのようなものを手に入れたいです(私が望むすべての線を描いたわけではありませんが、あなたが私の考えを理解できることを願っています):

白黒の CG で生成されたバスルームで、タイル間に赤い線が入っている

SURF ( (Speeded Up Robust Features) は堅牢な画像記述子であり、2006 年にHerbert Bay らによって最初に提示されたものです) または 2D Haar ウェーブレット応答の合計に基づいており、積分画像を効率的に使用するものを使用したいと考えています。画像上のすべての直線を見つけます。線の始点と終点の画像ピクセル座標に相対的に取得したい。

この図で、タイル間のすべての線と上の 2 つの黒い線を見つけます。

開始するコード例 (行検索機能付き) はありますか?

私は C と C++ が大好きですが、他の読み取り可能なコードはおそらく私に適しています =)

4

3 に答える 3

4

以下は、ハフ変換を適用して線を検出する完全な例です。私は仕事にMATLABを使用しています..

トリックは、画像を領域に分割し、それぞれを異なる方法で処理することです。これは、シーンに異なる「テクスチャ」があるためです (壁の上部領域のタイルは下部の暗いタイルとはまったく異なり、画像を一度に処理するのは最適ではありません)。

実際の例として、これを考えてみましょう:

%# load image, blur it, then find edges
I0  = rgb2gray( imread('http://www.de-viz.ru/catalog/new2/Holm/hvannaya.jpg') );
I = imcrop(I0, [577 156 220 292]);     %# select a region of interest
I = imfilter(I, fspecial('gaussian', [7 7], 1), 'symmetric');
BW = edge(I, 'canny');

%# Hough Transform and show accumulated matrix
[H T R] = hough(BW, 'RhoResolution',2, 'Theta',-90:0.5:89.5);
imshow(imadjust(mat2gray(H)), [], 'XData',T, 'YData',R, ...
       'InitialMagnification','fit')
xlabel('\theta (degrees)'), ylabel('\rho')
axis on, axis normal, colormap(hot), colorbar, hold on

%# detect peaks
P  = houghpeaks(H, 20, 'threshold',ceil(0.5*max(H(:))));
plot(T(P(:,2)), R(P(:,1)), 'gs', 'LineWidth',2);

%# detect lines and overlay on top of image
lines = houghlines(BW, T, R, P, 'FillGap',50, 'MinLength',5);
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

代替テキスト

代替テキスト

代替テキスト

良好な結果を得るためにパラメーターを調整しながら、他の地域に対して同じ手順を試すことができます。

于 2010-04-08T13:41:38.063 に答える
1

線を見つけるためのハフ変換などのより単純なアプローチを試しましたか?これを実行する関数と例は、cvHoughLines2と呼ばれるOpenCVに含まれています。

于 2010-04-08T11:24:21.833 に答える
0

2 次元ウェーブレット変換は、waveslimパッケージを使用して R に実装されています。具体的には、関数 dwt2D() は速度のために C の「バックエンド」を使用します。次に、しきい値を適用して線を見つけることができます。

于 2010-04-11T11:23:53.853 に答える