게시 한 샘플 이미지는 상대적으로 강한 원근법 (표면 법선 방향에서 직접 이미지화되지 않음)으로, 템플릿 사용 기법 마녀 사용 블록 처리에 문제를 일으킬 수 있습니다. 나는 당신이 강한 원근법으로 이미지를 가져와야한다고 가정합니다. 그래서 우리가 가장 먼저해야 할 것은 원근 투영을 제거하고 수정 된 이미지 ( "직선 이미지")를 가져올 이미지 변환을 추정하는 것입니다.
모양을 알 때 원근 투영 보정
전처리의 궁극적 인 목표는 컬러 차트의 배경 인 회색 사각형의 모서리를 찾는 것입니다. 나는 상수 값으로 단순히 임계 값으로 시작했습니다. Literature / web에는 이미지에 조명이 고르지 않을 때 임계 값을 지정하는 방법에 대한 많은 정보가 있지만 가능한 경우 조명이 상대적으로 균일하도록 이미징 설정을 수정하십시오.
컬러 차트는 화면의 상당 부분을 차지하므로 이미지의 연속 영역 중 가장 큰 부분 일 것입니다. 각기 다른 연결된 영역에 고유 인덱스를 부여하는 많은 흑백 레이블 기능 (MATLAB bwlabel, IPPs LabelMarkers, OpenCV에 외부 라이브러리 cvblob이 있음)이 있습니다. 레이블링 후 히스토그램을 사용하여 연결된 구성 요소의 영역을 계산 한 다음 가장 큰 영역이있는 구성 요소를 선택할 수 있습니다.
구성 요소에 구멍이 없도록 구성 요소를 채우는 것이 좋습니다. 이렇게하면 가장자리 픽셀 수가 줄어 듭니다.
이제 가장자리 찾기 연산자 (그라디언트 기반 방법을 사용했지만 검은 색 픽셀에 연결된 흰색 픽셀을 따라 가장자리를 추적 할 수 있음)를 사용하여 보더에 속하는 픽셀을 얻을 수 있습니다.
우리가 관심있는 대상은 사각형이므로, 강력한 라인 피팅 (RANSAC)을 사용하여 가장자리 픽셀에 4 개의 라인을 장착했습니다. 새 선을 찾은 후 찾은 선에 가까운 모든 점을 제거했습니다. 이렇게하면 후속 피팅 작업이 객체의 다른 모서리를 반환합니다. 마지막으로 모든 모서리가 발견되면 선 세트 사이의 가능한 모든 교차점을 계산했습니다. 결과 포인트 세트에서 이미지 외부의 모든 포인트를 제거했습니다.
HH
x=HX
그런 다음이 변환 행렬을 사용하여 색상 차트가 표면 법선 방향에서 직선으로 이미지화되도록 원본 이미지를 변환 할 수 있습니다.
H
여전히 템플릿 일치를 원한다면 적절한 템플릿 일치 방법을 사용할 수 있습니다. 이미지가 이미 수정되었으므로 회전 / 스케일이 변하지 않아도됩니다.