我在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

不知道这是否会帮助你明确你想要做什么,但我常常觉得它有用。

阈值的每个信道是不这样做肤色检测的一个非常强大的方法。简单的查找表的效果要好得多。查找表将记录每个颜色是多么容易被皮肤上的价值。还有,你可以用它来获得这样的值不同肤色的数据集。然后,你可以比较在表中的值的像素的颜色,做基于阈值的决定。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top