<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />그림 .jpeg에서 매우 유사한 색상(예: 회색)이 있는 픽셀 그룹을 어떻게 식별할 수 있습니까?
이에 대해 취할 수 있는 몇 가지 다른 접근 방식이 있다고 생각합니다. 제가 갖고 있는 한 가지 질문은 특정 색상(예: 회색)을 찾고 있습니까? 아니면 특정 픽셀에 대해 픽셀 색상이 주변 픽셀과 (거의) 일치하는지 확인하려는 것입니까? 하나의 "대상" 색상을 검색하는 첫 번째 시나리오에 대해 문의하신 것 같습니다. 다른 질문은 항상 회색을 찾고 있습니까, 아니면 대상 색상이 변경됩니까? 제가 묻는 이유는 색이 빨강, 초록, 파랑의 3성분으로 이루어져 있기 때문입니다. 그러나 rgb를 회색조 이미지로 변환하면 구성 요소가 하나만 있으므로 코드가 더 단순해집니다. 나는 당신이 회색이 아닌 색상을 찾고 있는 컬러 이미지로 작업하고 있다고 가정하겠습니다. 그렇지 않은 경우 코드를 단순화할 수 있습니다.
다음은 귀하에게 적합할 것으로 생각되는 한 가지 접근 방식입니다. 우리는 소스 이미지를 읽고 찾고 있는 목표 색상인 목표 이미지를 생성한 다음 하나를 다른 것에서 뺍니다. 그런 다음 결과를 통해 "동일" 허용 범위 내에 있는 픽셀을 찾을 수 있습니다.
먼저 이미지를 읽고 픽셀 값을 3개(빨간색, 녹색, 파란색) 행렬로 가져오고 싶을 것입니다.
imgSource = NewImage("$Sample_Images\black rhinofootprint.jpg");
{ rSource, gSource, bSource } = imgSource << getPixels("rgb");
win = newWindow("소스 이미지", imgSource);
다음으로 일치시키려는 대상 색상을 정의합니다. 이 예에서는 회색을 만들지만 원하는 값(0.0 - 1.0 사이)을 지정할 수 있습니다.
r값 = 0.5;
g값 = 0.5;
b값 = 0.5;
이제 목표 색상 이미지를 나타내는 새 행렬을 만들어 보겠습니다. 이러한 행렬은 소스 이미지와 크기가 동일해야 하며 대상 색상을 값으로 사용해야 합니다.
{ wd, ht } = imgSource << getSize();
rTarget = J(ht, wd, rValue);
gTarget = J(ht, wd, gValue);
bTarget = J(ht, wd, bValue);
이제 (각 색상 구성 요소에 대해) 하나를 다른 것에서 빼겠습니다.
rDiff = abs(rSource - rTarget);
gDiff = abs(gSource - gTarget);
bDiff = abs(bSource - bTarget);
이제 우리는 우리의 관용이 무엇인지 정의할 것입니다. 이것이 우리가 "동일"하다고 간주하는 정도입니다. 2% 이내가 동일에 충분히 가깝다고 가정해 보겠습니다.
공차 = 0.02;
이제 어떤 값이 허용오차보다 작은지 찾기 위해 diff 행렬을 반복할 수 있습니다. 이를 수행하는 방법에는 두 가지가 있습니다. 하나는 r, g, b를 보고 세 값 모두 허용오차보다 작은지 확인하는 것입니다. 다른 방법은 세 개의 diff 행렬을 하나의 강도(회색조) 행렬로 결합한 다음 픽셀당 하나의 강도 값을 보는 것입니다. 개인적으로 나는 그 접근 방식을 더 좋아합니다. 그래서 먼저 회색조 행렬로 변환하겠습니다.
강도 = 0.30*rDiff + 0.59*gDiff + 0.11*bDiff;
이제 각 값을 허용 오차와 비교하는 강도 매트릭스를 반복해 보겠습니다.
(y = 1, y <= ht, y++,
(x = 1, x < wd, x++,
if (inten[y,x] < 허용오차,
// "동일한" 픽셀을 찾았습니다. 원본에서 "빨간색"으로 만들어 표시되도록 하겠습니다.
r소스[y,x] = 1.0;
g소스[y,x] = 0.0;
b소스[y,x] = 0.0;
);
);
);
이제 우리가 찾은 픽셀을 볼 수 있도록 새 값을 원래 이미지로 다시 설정해 보겠습니다.
imgSource << setpixels("rgb", {rSource, gSource, bSource});
그리고 그게 전부입니다!:)
다시 말하지만, 회색조 이미지로 작업하고 회색 값을 검색하는 경우 소스와 대상 모두에 대해 3개의 행렬 대신 하나의 행렬로 작업하기 때문에 더 쉽습니다.
제가 파일 교환에 올려놓은 이미지 샘플 중 일부를 보고 싶을 수도 있습니다. 파일, ImageExamples.jsl 그리고 ImageDiff.jsl 가장 유용할 수 있습니다. 또한 다음과 같은 이미지의 색상 분석에 대해 설명하는 블로그 게시물이 있습니다. 코끼리 발의 이미지 분석 .
이게 도움이 되길 바란다!
남자