查(在一定阈值内),用于特定颜色的各像素
-
19-08-2019 - |
题
我在MATLAB RGB图像时,我想通过每个像素循环,并检查它是否皮肤着色(ISH)[I可能会做在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和这样的扩展。我想使一个功能
功能OUT = isFlesh(IN)
%%放肉这里检查代码
我怀疑你会希望有一个范围,这些的(isCaucasian,isAsian等)的问题将是,有一个巨大的肉的颜色范围,所以你要要检查接近以类似的颜色范围内的邻居。
问题的这部分是容易的,但更大的问题是充满危险。
-Doug
其他提示
有一点要记住的是,RGB图像是3-d矩阵。第一 “页”(即<强> A(:,:,1)强>)是红色,第二绿色,第三个是蓝色。有时候,我觉得它更容易在RGB矩阵通过他们重塑成N×3矩阵,其中的所有红色像素均处于第1列运行,绿柱中2,和蓝色的第3列这是如何做到这一点:
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
不知道这是否会帮助你明确你想要做什么,但我常常觉得它有用。
阈值的每个信道是不这样做肤色检测的一个非常强大的方法。简单的查找表的效果要好得多。查找表将记录每个颜色是多么容易被皮肤上的价值。还有,你可以用它来获得这样的值不同肤色的数据集。然后,你可以比较在表中的值的像素的颜色,做基于阈值的决定。
不隶属于 StackOverflow