2012-06-20 5 views
1

RGB 이미지가 있습니다. 이미지를 스캔했습니다. 따라서 이미지는 A4 크기의 작은 부분을 차지합니다.이미지의 가장자리를 찾고 MATLAB에서 잘라냅니다.

이미지의 경계를 찾고 자르고 싶습니다. 'Sobel'등의 가장자리 감지 연산자를 사용할 수는 있지만 이미지에있는 모든 가장자리를 감지합니다. 내가 원하는 것은 이미지의 경계입니다. 또한 '경계선'을 포함한 대부분의 가장자리 감지 기능은 바이너리 또는 그레이 스케일 이미지에서만 작동합니다. 내 이미지는 RGB입니다.

'imcrop'을 사용해 보았습니다. 그러나 대화 형 자르기가 더 많습니다. 나는 이것을 자동으로하고 싶어한다.

테스트 이미지를 업로드 :

+0

견본 이미지를 업로드 할 수 있습니까? – Jonas

답변

0

당신은 예를 들어, 사용하여 이미지의 모서리를 감지하는 시도 할 수 있습니다 해리스 탐지기 (Matlab의 corner). 감지 할 수있는 최대 모서리 수를 4로 설정합니다. 그런 다음 모서리 위치를 imcrop에 사용합니다. 이미지를 게시하면보다 구체적인 힌트를 줄 수 있습니다. 이미지가 RGB가되면 문제가되지 않으며 그레이 스케일로 변환하면됩니다.

+0

감사합니다. 이것을 시도 할 것입니다. 테스트 이미지를 업로드했습니다. 배경과 이미지 사이의 픽셀 값에는 차이가 있기 때문에 이미지의 경계를 알 수 있습니다. 나는 4 개의 코너로 코너 기능을 시도 할 것이다. – Sista

5

이것은 rgb 이미지이므로 회색 영역에는 명백한 색이 표시되지만 흰색 영역에는 분명 색이 없어야합니다. 이것을 사용하여 이미지를 찾으면 경계 상자를 얻을 수 있습니다. enter image description here

%# get the areas and bounding box of the areas above threshold 
%# as an additional criterion, you could also use excentricity 
%# or you could simply remove the bottom 100 rows of the scan 
stats = regionprops(tto,'BoundingBox','Area'); 
area = cat(1,stats.Area); 
[~,maxAreaIdx] = max(Area); 
bb = round(stats(maxAreaIdx).BoundingBox); 

%# note that regionprops switches x and y (it's a long story) 
croppedImage = img(bb(2):bb(2)+bb(4),bb(1):bb(1)+bb(3),:); 

enter image description here

테두리의 비트가있다

%# invert tt so that it's 1 where there is signal 
tt = ~tt; 

%# clean up some of the smaller artifacts 
tto = imopen(~tt,strel('square',100)); 

enter image description here

img = imread('http://i.stack.imgur.com/dEawA.jpg'); 
%# instead of "==" you can check for similarity within a tolerance 
tt=img(:,:,1)==img(:,:,2) & img(:,:,2) == img(:,:,3); 

인해 회전하는 왼쪽. 위의 마스크 tto을 사용하여 자르기 전에 모든 비 이미지 픽셀을 NaN으로 설정하거나 imrotate을 사용하여 이미지를 수정할 수 있습니다.

+0

안녕 Jonas, 고마워. 나는이 방법으로 일한 '지역 방제비'를 알지 못했다. 나는 이것을 시도 할 수 있다고 생각한다. – Sista

관련 문제