Matlab im2bw, imcrop example
MATLAB에서 im2bw()함수와 imcrop()함수를 이용하여 이미지의 유효영역만 별도의 파일에 저장하는 예
원래의 이미지 (영상의 주위에 있는 회색영역을 MATLAB을 이용하여 제거하고자 한다)
유효영역만 잘라낸 결과 이미지
사용된 소스코드
% 촬영된 이미지의 유효영역이 일정한 영역에 위치한다면 아래의 변수를 사용하여 루프를 실행할 때 % 루프의 횟수를 단축할 수 있도록 유효영역에 근접하도록 아래의 변수를 설정하고 루프에서 사용하면 된다 xStart = 0; yStart = 0; xEnd = 0; yEnd = 0; rgbImg = imread('인식테스트_000002.jpg'); grImg = rgb2gray(rgbImg); %mxv = max(max(grImg)); %mnv = min(min(grImg)); %tmp = sprintf('최대=%d, 최소=%d', mxv, mnv); %disp(tmp); %avg = (double(mnv + (mxv-mnv)/2.0))/255.0; binImg = im2bw(grImg, 0.92); %imshow(binImg); % 이진화 이미지 출력 sz = size(binImg); disp(sz); h = sz(1); % 행수 w = sz(2); % 열수 msg = sprintf('폭=%d, 높이=%d',w,h); disp(msg); left=0; right = 0; top = 0; bottom = 0; % 이미지에서 검은색이 시작되는 좌측 좌표를 찾는다 go = 1; for x=1:w if(go==0) break; end; for y=1:h if(binImg(y,x)==0) disp(sprintf('발견(L), x=%d, y=%d',x,y)); left = x; go = 0; break; end; end; end; % 이미지에서 검은색이 시작되는 우측 좌표를 찾는다 go = 1; for x=w:-1:1 if(go==0) break; end; for y=1:h if(binImg(y,x)==0) disp(sprintf('발견(R), x=%d, y=%d',x,y)); right = x; go = 0; break; end; end; end; % 이미지에서 검은색이 시작되는 상단 좌표를 찾는다 go = 1; for y=1:h if(go==0) break; end; for x=1:w if(binImg(y,x)==0) disp(sprintf('발견(T), x=%d, y=%d',x,y)); top = y; go = 0; break; end; end; end; % 이미지에서 검은색이 시작되는 하단 좌표를 찾는다 go = 1; for y=h:-1:1 if(go==0) break; end; for x=1:w if(binImg(y,x)==0) disp(sprintf('발견(B), x=%d, y=%d',x,y)); bottom = y; go = 0; break; end; end; end; disp(sprintf('유효한 이미지 영역= %d, %d, %d, %d', left, top, right, bottom)) cropImg = imcrop(grImg, [left,top,right-left,bottom-top]); imshow(cropImg); imwrite(cropImg, 'cropImage.jpg','jpg');