2

matlab で独自の dilate および erode 関数を作成しようとしています。機能する実装がありますが、出力画像のサイズが変わります。

これは私が持っているものです:

浸食

function eroded = erode(X) 
eroded = col2im(min(im2col(X, [3 3])), [3 3], size(X));
end

拡張する

function dilated = dilate(X) 
dilated = col2im(max(im2col(X, [3 3])), [3 3], size(X));
end

これらは視覚的に機能しますが、それらで作成された領域をオーバーレイしようとすると、画像マトリックスの次元が変更されたため、めちゃくちゃになります。問題がcol2imまたはにあることを確認しましたim2col。誰が私が間違っているのか教えてもらえますか?

それをいじってみると、変換されたマトリックスの列のサイズを1に減らす方法minに関連している可能性が高いことがわかりました。max

4

1 に答える 1

1

実装で境界条件を考慮していないようです。

これを行うには、ほとんどの場合、関数を 1 行で記述することはできません。次の 2 つのいずれかを行うことができます: 1) エッジに適用する別のフィルターを作成し、出力にこれらの値を追加する、または 2) 境界とゼロパッドを無視する、または 3) 境界を無視して値を追加する元の画像から。

注: 独自の関数を作成していますが、効果的な組み込みの Matlab 関数は次のようになります。

eroded = imerode(X,[1,1,1;1,1,1;1,1,1]);

そして膨張のために:

dilated = imdilate(X,[1,1,1;1,1,1;1,1,1]);
于 2013-02-12T05:55:45.723 に答える