6

画像mを使用してMATLABでimerodeとimdilateを使用します

0 0 0 
0 1 0
0 0 0 

および構造化要素f

0

imerodeを使用した結果は次のとおりです。

inf inf inf
inf inf inf
inf inf inf

そしてimdilateのために

-inf -inf -inf
-inf -inf -inf
-inf -inf -inf

誰かが私にそれを説明できますか?
どうもありがとうございます。

4

3 に答える 3

1

このアーティファクトは、存在しない値に構造化要素を適用するときに発生します(たとえば、境界で発生する可能性があります。この場合、中心を除外する1x1構造化要素を使用することによって発生する可能性があります)。
このような場合、MATLABimerodeimdilateyield-InfInfはそれぞれです。

この現象の説明については、こちらをご覧ください。

于 2013-01-01T13:58:05.660 に答える
1

この問題を理解するには、侵食と膨張の演算子を理解する必要があります。これらの操作の一般的な一般化は、極小および最大フィルターとして行われます(構造化要素(SE)またはカーネルがフィルターする要素を選択します)。

実際の例で拡張と侵食を説明する

真の要素の3x3の正方形であるSEを使用すると、侵食は、各画像要素とその8つの隣接要素すべての間の最小値を見つけることによって各画像要素の最小値を計算します。

octave> im
im =

   5   9   2   6
   8   5   8   1
   7   8   6   9
   8   4   8   1

octave> imerode (im, [1 1 1; 1 1 1; 1 1 1])
ans =

   5   2   1   1
   5   2   1   1
   4   4   1   1
   4   4   1   1

また、SEの中央要素をfalseに設定すると、8つの隣接要素すべての最小値が計算されます(SEにはそれ自体が含まれていないことに注意してください)。

octave> imerode (im, [1 1 1; 1 0 1; 1 1 1])
ans =

   5   2   1   1
   5   2   1   2
   4   4   1   1
   4   6   1   6

しかし、SEが「空」で、真の要素がない場合はどうなりますか?最小値を計算する場所から画像に要素がない場合はどうなりますか?ちょうどのSEであるユースケースは、0真の要素がまったくないという点で非常に具体的です。侵食操作では、空のセットの最小値を計算する必要があります。空集合の最小値はいくつですか?

octave> imerode (im, [0])
ans =

   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf

答えはあまり意味がありません。しかし、操作、つまり空集合の最小値も同様です。しかし、Matlabは実際にどのようにしてこの奇妙な答えに到達するのInfでしょうか?

どうやって間違った答えを得るのですか?

Infand -Inf(Octaveでも発生)の結果は、実装の詳細です。Matlabはクローズドソースであるため、どのようにしてそこに到達するかはわかりませんが、考えられるケースの擬似コードを次に示します(原則として、Octaveで発生するものと同様です)。

## pseudo-code for imerode (local-minimum) that may causes this issue
set eroded to image
for each element in image
    set MIN_VAL to +Inf
    for each value in element neighbourhood
        if value < MIN_VAL
            set MIN_VAL to value
    set eroded[element index] to MIN_VAL

これは本当にすべてですか?そのようなSEで侵食と膨張を実際に計算することはできませんか?

この操作を定義する理論的論文を調べると、通常は(離散ではなく)連続区間で、最大値と最小値の代わりに、結果が空集合の場合の上限と下限を参照していることわかります。したがって、拡張と侵食の定義で、最大値と最小値ではなく、最大値と最小値を使用するかどうかによって異なります。また、空集合の上限と下限がとであると受け入れるかどうかにも依存します。-Inf+Inf-Inf+Inf

このため、Matlabは故意に戻っInfてきますか?-Infわかりませんが、しません。imerodeとimdilateのドキュメントは、maxとminの操作のみを参照しており、最も明白な実装(上記の擬似コードを参照)がこの結果につながります。

数年前にOctaveを実装imdilateしたとき、私はこれに気づいていなかったことを知っています。imerode

パディング値に関するこの他の回答とコメントはどうですか?

画像にの値がない場合、Infとの結果として表示される方法は2つありimdilateますimerode。最終結果であるInf値は同じように見えるかもしれませんが、それらを取得する理由は完全に異なります。

この質問に関する1つの状況は、「空白の」SE、つまり真の要素を持たないSEがある場合です。その場合、画像の各ポイントで、空のセットの最小値を計算します。これはパディングとは何の関係もありません。パディングや欠落値は一切ありません。を取得する理由は、値のセット全体を実際にInf生成してからその最小値を見つけるわけではないためです。1つの値(可能な限り最大の値)から開始し、そのセットに含まれていた次の値と比較します。そのセットは空であるため、比較は行われず、最終的にその初期値は。になります。それはこれを説明します:InfInf

octave> imerode (5, 0)
ans = Inf

同じ結果につながるが質問とは関係のないもう1つのケースは、SEが画像の外側の要素のみを「選択」する場合です。これは、Mathworksブログの拡張と侵食におけるパッド値で説明されています。理論的には、侵食と拡張の操作は境界外の要素を無視します(それらは存在するべきではありません)。実際には、それらを無視すると計算コストがかかるため、それらを数えます(それ以降、画像のどこにいるかを知り、それに応じてSEを調整する必要があります)。たとえば、SEが3x3の正方形で、画像の左上隅を評価している場合、上部と左側の境界外の画像要素を回避することは困難です。したがって、Matlabは画像をInfこれらの値はminの結果に影響を与えないためです。ただし、これは、最小値を選択する値がセットに他にある場合にのみ当てはまります。画像のいずれかの時点ですべてのSEが境界外の要素である場合はInf、パディングのみから得られた一連のsの最小値を計算します。それはこれを説明します:

octave> imerode (5, [1 1 1; 1 0 1; 1 1 1])
ans = Inf

octave> imerode (zeros (3), [0 0 0; 1 0 0; 1 1 0])
ans =

     0     0     0
     0     0     0
   Inf     0     0

octave> imerode (zeros (3), [0 0 0; 0 0 0; 1 1 1])
ans =

     0     0     0
     0     0     0
   Inf   Inf   Inf
于 2016-05-09T14:05:04.547 に答える
0

0実際には、それが得られる出力である場合と同等の構造化要素(SE)はありません。他の質問によると、構造要素がゼロのErose / Dilate画像strelは、Matlabの関数の誤用にすぎません。

まず、あなたが実際にユニークなポイントであるSEを持っていると仮定しましょう0。侵食の場合、これは、検査中の現在の位置での強度とそれ自体の間の最小値を取ることを意味します。したがって、現在の位置での強度以外に出力するものはありません。これは拡張についても同じです。それを確認するには、侵食と拡張の式を説明する正しいテキストを確認します。そして、Matlabでは:

f = [0 0 0; 0 1 0; 0 0 0]
se = strel('arbitrary', 1, 0)
imerode(f, se)

ans =

     0     0     0
     0     1     0
     0     0     0

imdilate(f, se)

ans =

     0     0     0
     0     1     0
     0     0     0

さて、のように無効なSEを作成し、それでse = strel('arbitrary', 0)形態学的演算子を使おうとすると、未定義の結果しか期待できません。Matlabは素晴らしく、見るべきものを提供しています。

于 2013-01-03T21:13:27.840 に答える