2

バイナリ イメージを厚くしています。ラベルを各方向に n ピクセルずつ拡大したいと考えていました。

元の画像:

元のラベル イメージ

最初に、関数 bwmorph(I, 'thicken', 25) を使用して、次の画像を取得しました。

形態学的肥厚後

これは良くありません。肥厚は構造要素 [0,1,0;1,1,1;0,1,0] を使用しているように見えるため、常に円をひし形に変換します。上記の構造化要素を使用して imdilate を実行すると、同じ出力が得られます。

次に、構造要素 [1,1,1;] を使用して、元の画像を n=25 回繰り返し膨張させてみました。1,1,1; 1,1,1] で、次の画像が得られました。

反復膨張

元の形状は完全に失われています。

膨張は常に境界線をある程度歪ませることを理解しています。構造要素 'disk' (r=5、5 回拡張) を試してみたところ、かなり良い結果が得られました。

ここに画像の説明を入力

これでいいのか?元の円形を可能な限り維持するには、どの構造要素を選択すればよいですか? 特定の膨張距離 (10 ~ 100 の範囲で変化し、ラベルは円形から楕円形までさまざま) に適したサイズを見つけるための適切な経験則はありますか? 元の形状を維持しながら、すべての方向にバイナリ イメージを成長させるより良い方法はありますか?

構造化要素をより適切なものに変更しながら、オイラー特性を維持する方法はありますか?

4

2 に答える 2

3

これを試して:

bw = imread('bw.png');
figure; imshow(imdilate(bw, strel('arbitrary', bw)))

画像自体を拡張するために使用しています。これにより、より形状を維持した成長が得られます。

更新: @Tapio が言ったように、次を使用してサイズ変更係数を簡単に調整できますimresize

 figure; imshow(imdilate(bw, strel('arbitrary', imresize(bw, 0.5))))

次の出力で:

ここに画像の説明を入力

于 2016-08-16T15:28:42.193 に答える
1

ユニタリ構造要素のみを使用すると、説明した問題に常に直面します。サイズ N の構造要素で形状を膨張させたい場合、サイズ 1 の構造要素の N 倍を使用しないでください。そうしないと、美しく予想外の変形になってしまいます。

サイズ N の膨張を行いたい場合は、半径 N のディスクを試してください。ただし、処理に時間がかかります。

もう 1 つの解決策は、距離マップを使用することです。形状はシード (距離 0) であり、N より小さい距離にあるすべてが結果になります。これは、サイズ N の膨張にかなり似ています。

于 2016-08-16T19:57:01.627 に答える