特定の色(特定のしきい値内)の各ピクセルを確認します
-
19-08-2019 - |
質問
MATLABにRGBイメージがあり、各ピクセルをループして、肌の色(ishish)かどうかを確認します[照明などの影響を打ち消すために、後でHSV空間で行うでしょう。]
これを行う最善の方法を知っている人はいますか? MATLABの奇妙な構文は、私を少し混乱させます!
現時点では次のとおりです。
for x = 1:size(I,1)
for y = 1:size(I,2)
%Get the value from this x,y coordinate and check the colour.
end
end
しかし、それは恐ろしく間違っていると思います。
マトリックスのさまざまな部分に正しくアクセスするにはどうすればよいですか
解決
エド
ループする必要はありません:
>> a = magic(5)
a =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>> vi = (a > 5) & (a < 10)
vi =
0 0 0 1 0
0 0 1 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 1
このステートメントをRGBなどに展開する方法を確認できます。関数を作成します
function out = isFlesh(in)
%%はここに肉チェックコードを入れます
これらの範囲(isCaucasian、isAsianなど)が必要になるのではないかと考えています同様の色範囲の隣人に。
問題のこの部分は簡単ですが、より大きな問題には危険が伴います。
-Doug
他のヒント
心に留めておくべきことの1つは、RGB画像は3Dマトリックスであるということです。最初の<!> quot; page <!> quot; (つまり、 A(:、:、1))は赤、2番目は緑、3番目は青です。時々、すべての赤ピクセルが列1に、緑が列2に、青が列3にあるN行3列のマトリックスに再形成することで、RGBマトリックスを操作する方が簡単な場合があります。
A = (a 3-D RGB image);
matSize = size(A);
A = reshape(A,prod(matSize(1:2)),3);
...
% Modify or extract data from reshaped matrix
...
A = reshape(A,matSize); % Return A to original dimensions
これがあなたがやりたいことを具体的に助けるかどうかはわかりませんが、私はしばしばそれが役立つと思います。
すべてのチャネルのしきい値設定は、肌色検出を行うための非常に堅牢な方法ではありません。単純なルックアップテーブルの方がはるかに優れています。ルックアップテーブルは、各色の値を、それがスキンになる可能性を記録します。このような値を取得するために使用できるさまざまなスキンカラーデータセットがあります。次に、ピクセルの色を表の値と比較して、しきい値に基づいて決定を行うことができます。