1

今日は別の問題があります。バイナリ行列 t があります。ここで、1 は河道を表し、0 は洪水面と周囲の山を表します。

t = Alog>10;
figure
imshow(t)
axis xy

さらに計算するために、河道の領域を各方向に数ピクセル拡大したいと思います。一般的に言えば、後の水理モデルに大きな領域を含めるために、画像に表示されるチャネルを広くしたいと考えています。

これは私の試みで、特定の地域では機能しますが、川が xy 軸に対して斜めに走っている地域では、水路を広げません。これに近づくには流れがあるようで、なかなか掴めません。

[q,o] = find(t == 1);   

qq = zeros(length(q),11);
oo = zeros(length(o),11);

% add +-5 pixel to result
for z=1:length(q)
    qq(z,:) = q(z)-5:1:q(z)+5;
    oo(z,:) = o(z)-5:1:o(z)+5;
end
% create column vectors
qq = qq(:);
oo = oo(:);

cords = [oo qq]; % [x y]

% remove duplicates
cords = unique(cords,'rows');

% get limits of image
[limy limx] = size(t);

% restrict to x-limits
cords = cords(cords(:,1)>=1,:);
cords = cords(cords(:,1)<=limx,:);

% restrict to y-limits
cords = cords(cords(:,2)>=1,:);
cords = cords(cords(:,2)<=limy,:);

% test image
l = zeros(size(img));
l(sub2ind(size(l), cords(:,2)',cords(:,1)')) = 1;
figure
imshow(l)
axis xy

これは私が得るイメージです:

一部の領域ではチャネルが広がりますが、一般的に、私のアプローチには欠陥があるようです. ピクセルの対角線で同じアプローチを使用すると、 [1 1; のペアが増えるだけなので、線はまったく広がりません。2 2; 3 3; 等]。これに対するより良いアプローチ、または画像処理の領域からの何かはありますか? 設定された直径のぼかしフィルターは、多少似たように機能するはずですが、役立つものは見つかりませんでした...

PS: すでに 10 人の担当者がいますが、画像を追加することはできませんでした。ここに直接リンクがあります。

http://imageshack.us/a/img14/3122/channelthin.jpg http://imageshack.us/a/img819/1787/channelthick.jpg

4

2 に答える 2

1

画像処理から形態学的操作を適用できます。あなたの例では、形態学的拡張を使用できます。

画像処理ツールボックスから、bwmorthコマンドBW2 = bwmorph(BW,'dilate')または imdilate コマンドを使用できますIM2 = imdilate(IM,SE)

IM画像はどこにSEあり、構造要素です。バイナリ イメージを「1 ピクセル」だけ拡張するように設定SE = ones(3);できますが、アプリケーションに応じて変更できます。または、必要に応じて、同じ構造化要素を使用して画像を数回膨張させることもできます。

于 2013-04-22T18:11:41.230 に答える