私はMatlabと画像処理も初めてです。このような画像で背景と前景を分離する作業を行っています
私はこのような画像を何百枚も持っています。試行錯誤により、(RGB 空間で) しきい値を見つけました。赤のレイヤーは常に 150 未満であり、背景がある場所では緑と青のレイヤーは 150 を超えています。
したがって、私のRGB画像がI
および私のr
場合g
、b
レイヤーは
redMatrix = I(:,:,1);
greenMatrix = I(:,:,2);
blueMatrix = I(:,:,3);
赤、緑、青の値が150より大きいか小さい座標を見つけることで、次のような背景の座標を取得できます
[r1 c1] = find(redMatrix < 150);
[r2 c2] = find(greenMatrix > 150);
[r3 c3] = find(blueMatrix > 150);
で何千ものピクセルの座標を取得するようになりましたr1,c1,r2,c2,r3 and c3
。
私の質問:
赤が 150 未満で、緑と青が 150 より大きいピクセルの座標など、一般的な値を見つける方法は?
r1
andのすべての座標を反復しc1
、それらが発生するかどうかをr2 c2
確認r3 c3
し、それが共通点であることを確認する必要があります。しかし、それは非常に高価です。 これはループなしで実現できますか?[commonR commonC]
どういうわけか、 andcommonR
とcommonC
are both of order のような共通点を思いついた場合5000 X 1
、 Image のこの背景ピクセルにアクセスするI
には、最初にアクセスしてから、次commonR
のようにcommonC
imageにアクセスする必要がありますI
I(commonR(i,1),commonC(i,1))
それも高価です。繰り返しますが、私の質問は、これをループなしで実行できるかということです。
どんな助けでも大歓迎です。
@Science_Fictionの回答で解決策を得ました
彼/彼女の答えを精緻化するだけです
使った
mask = I(:,:,1) < 150 & I(:,:,2) > 150 & I(:,:,3) > 150;