각 픽셀이 특정 색상을 확인하십시오 (특정 임계 값 내에)
-
19-08-2019 - |
문제
나는 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
이것이 당신이하고 싶은 일에 구체적으로 도움이 될지 확실하지 않지만 종종 그것이 유용하다고 생각합니다.
임계 값 모든 채널은 피부색 감지를 수행하는 매우 강력한 방법이 아닙니다. 간단한 조회 테이블이 훨씬 더 잘 작동합니다. 조회 테이블은 각 색상에 대한 값을 기록하여 피부가 될 가능성이 높습니다. 이러한 값을 얻기 위해 사용할 수있는 다양한 피부색 데이터 세트가 있습니다. 그런 다음 픽셀의 색상을 테이블의 값과 비교하고 임계 값에 따라 결정을 내릴 수 있습니다.