문제

나는 Matlab에 RGB 이미지를 가지고 있으며, 각 픽셀을 통과하고 피부색이 있는지 확인하고 싶다.

누구든지 이것을하는 가장 좋은 방법을 알고 있습니까? 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 이미지가 3D 행렬이라는 것입니다. 첫 번째 "페이지"(예 : a (:, :, 1))은 빨간색이고 두 번째는 녹색이고 세 번째는 파란색입니다. 때로는 모든 레드 픽셀이 열 1 열에있는 n-by-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

이것이 당신이하고 싶은 일에 구체적으로 도움이 될지 확실하지 않지만 종종 그것이 유용하다고 생각합니다.

임계 값 모든 채널은 피부색 감지를 수행하는 매우 강력한 방법이 아닙니다. 간단한 조회 테이블이 훨씬 더 잘 작동합니다. 조회 테이블은 각 색상에 대한 값을 기록하여 피부가 될 가능성이 높습니다. 이러한 값을 얻기 위해 사용할 수있는 다양한 피부색 데이터 세트가 있습니다. 그런 다음 픽셀의 색상을 테이블의 값과 비교하고 임계 값에 따라 결정을 내릴 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top