現在、MATLAB で画像セグメンテーションを実装しています。私は2つの実装を持っています。
- 画像は前景と背景の 2 つの領域に分割されます。
- 画像は 3 つ以上の領域に分割されています。たとえば、3 つまたは 4 つの領域に分割されているとします。
サイコロ係数または Jaccard インデックスを使用して、セグメント化された画像とグラウンド トゥルース (手動でセグメント化された画像) の間の類似度を計算しようとしています。これは、2 つの領域に分割されたセグメント化されたイメージに適しています。これは、次のコードによって実装されます。
dice = 2*nnz(segIm&grndTruth)/(nnz(segIm) + nnz(grndTruth))
これは、segIm と grndTruth が同じサイズであることを想定しています。また、数値または論理である必要があります。
ただし、複数の領域セグメント化された画像の類似性の比較にこの尺度を適用する方法を見つけることができませんでした。アプリケーションでダイス係数を使用する方法を誰か教えてもらえますか?
編集: nkjt の提案に関して、私は基本的な実装を行い、以下の結果を示しています。精度を高めるために、誰でも自由にコードをアップグレードしてください。
2 つの行列の形で 2 つの画像を考えています。A はセグメント化されたイメージで、B は手動のグラウンド トゥルースです。上記の推奨実装の matlab コードを以下に示します。チェックして、あなたの考えを教えてください。
A=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4]
B=[1 3 4 4;1 1 3 4;1 2 3 4;1 2 3 1]
%//First Suggestion
dice = 2*nnz(A==B)/(nnz(A) + nnz(B))
%//2nd Suggestion
A1=(A==1);B1=(B==1);
A2=(A==2);B2=(B==2);
A3=(A==3);B3=(B==3);
A4=(A==4);B4=(B==4);
dice = (2*nnz(A1&B1)/(nnz(A1) + nnz(B1))...
+2*nnz(A2&B2)/(nnz(A2) + nnz(B2))...
+2*nnz(A3&B3)/(nnz(A3) + nnz(B3))...
+2*nnz(A4&B4)/(nnz(A4) + nnz(B4)))/4
注意:この場合、3 相と 4 相の両方のセグメント化された画像にハウスドルフ距離測定を適用できるかどうかも知りたいです??
編集:私は新しいクエリを持っています。画像に 4 つの領域があり、次の例に示すように、この方法で正しくセグメント化されているとします。異なる領域を表すために異なる強度値が使用されている場合、ダイス係数を使用すると、2 つのセグメント化された結果が異なる結果になります。セグメント化された Reg 1 の場合、 dice = 1 ** があり、 **Segmented Region 2 の場合、 dice = 0.75 があります。しかし、どちらの結果も正確です。セグメント化された結果がサイコロ係数の答えを反映するようにコードを変更するにはどうすればよいですか?