Download presentation
Presentation is loading. Please wait.
1
Image Processing for OCR using Matlab
Technical seminar Image Processing for OCR using Matlab 이근호 July 25,2007
2
Contents About Matlab Drawing Binarization Labelling Segmentation
Normalize Q&A
3
Matlab 매트웍스사에서 개발한 수치 해석 및 프로그래밍 환경을 제공하는 공학용 소프트웨어
행렬을 이용한 처리가 용이하며, 함수와 데이터의 그래프 표현이 가능하며, 또한 알고리듬의 적용, 사용자 인터페이스 생성 및 다른 프로그래밍 언어와의 연결도 가능 각종 내장 함수를 포함한 이같은 기능을 활용해서 과학, 공학 분야에 있어서의 제반문제를 빠르게 풀 수 있으며, 수치 해석에 특화된 소프트웨어이지만 메이플 심볼릭 엔진과의 연동을 가능케하는 툴박스(추가 기능)를 적용하면 완전한 컴퓨터 수식처리 시스템으로도 기능 그 밖의 각종 툴박스 패키지를 이용하면 더욱 확장된 기능을 사용할 수 있음
4
Drawing 창하나에 이미지 뿌리기 % 파일명 imgdraw.m
pszFileName = 'arial_10pt_6x7.tif'; % 파일명(string제어)font 패턴 데이터 raw_rgbimage = imread(pszFileName); % 이미지 파일을 읽어서 raw_rgimage에 load info = imfinfo(pszFileName); % 이미지 파일 정보 출력 imshow(raw_rgbimage); % 이미지를 창에 출력 * 글자 출력 disp('으하하하')
5
Drawing (Cont’d) 창 2개에 각각 이미지 뿌리기
pszDBFileName = 'arial_10pt_6x7.tif'; % 파일명(string제어)font 패턴 데이터 raw_rgbimage = imread(pszDBFileName); % 이미지 파일을 읽어서 raw_rgimage에 load info = imfinfo(pszDBFileName); % 이미지 파일 정보 출력 disp(raw_rgbimage); %imshow(raw_rgbimage); % 이미지를 창에 출력 imshow(raw_rgbimage(:,:,:,1)) % 문자인식할 이미지 pszSrcFileName = 'arial_16pt_9323.tif'; % 이미지 파일을 읽어서 raw_rgimage에 load raw_rgbimage2 = imread(pszSrcFileName); figure, imshow(raw_rgbimage2(:,:,:,1))
6
Drawing (Cont’d) 창하나에 2개 이미지 출력하기
pszDBFileName = 'arial_10pt_6x7.tif'; % 파일명(string제어)font 패턴 데이터 raw_rgbimage = imread(pszDBFileName); % 이미지 파일을 읽어서 raw_rgimage에 load info = imfinfo(pszDBFileName); % 이미지 파일 정보 출력 disp(raw_rgbimage); subplot(1,2,1), imshow(raw_rgbimage); pszSrcFileName = 'arial_16pt_9323.tif'; % 문자인식할 이미지 raw_rgbimage2 = imread(pszSrcFileName); % 이미지 파일을 읽어서 raw_rgimage에 load subplot(1,2,2), imshow(raw_rgbimage2);
7
Drawing (Cont’d) <console 화면> (:,:,3) = Columns 1 through 16
Columns 1 through 16 Columns 17 through 32 … <생략> Columns 49 through 60 >>
8
Binarization [i,map] = imread('trees.tif'); imshow(i); i1 = ind2rgb(i,map); figure; imshow(i1) i2= ind2gray(i,map); figure; imshow(i2) i3 = im2bw(i,map,0.5); figure; imshow(i3)
9
Labelling L = bwlabel % 1차원 데이터에 대해서~
Label connected components in a binary image 사용법 L = bwlabel(BW,n) [L,num] = bwlabel(BW,n) 사용예 BW = [ ]; L = bwlabel(BW,4) L = [r,c] = find(L==2); rc = [r c] rc =
10
Labelling (Cont’d) bwlabeln % N차원 이미지에 대해서 라벨링해줌
Label connected components in N-D binary image Example BW = cat(3,[1 1 0; 0 0 0; 1 0 0],... [0 1 0; 0 0 0; 0 1 0],... [0 1 1; 0 0 0; 0 0 1]) bwlabeln(BW) ans(:,:,1) = ans(:,:,2) = ans(:,:,3) =
11
Labelling (Cont’d) 실제 사용예) 이미지가 배경이 흰색이고 글자가 검정일 때!
실제 사용예) 이미지가 배경이 흰색이고 글자가 검정일 때! pszSrcFileName = 'arial_16pt_9323.png'; % 문자인식할 이미지 raw_rgbimage2 = imread(pszSrcFileName); % 이미지 파일을 읽어서 raw_rgimage에 load LabledData = bwlabel(~raw_rgbimage2); % inverse시켜줌으로써 흑백 바꿈! figure, imshow(LabledData == 2); % 2번에 해당하는 이미지만 뿌려줌! * Whos 명령어 Name, Size, Byte, Class를 보여줌 >> whos Name Size Bytes Class LabledData x double array info x struct array pszDBFileName x char array pszSrcFileName x char array raw_rgbimage x60x uint8 array raw_rgbimage x logical array
12
Segmentaion 나누어진 문자 하나의 크기를 확인한다. 결과> splited char size 12 7
stats = regionprops(LabledData,'FilledImage'); newmap = [stats(3).FilledImage]; % disp(newmap); 라벨링후 3에 해당하는 이미지 영역을 긁어서 newmap에 새로운 2차원 배열을 복사 생성한다. 결과> [h w] = size(newmap); disp('splited char size'); disp(h); disp(w); 나누어진 문자 하나의 크기를 확인한다. 결과> splited char size 12 7
13
Normalization 사이즈를 DB에 맞게 resize 시켜준다. scaleH = 6 ; scaleW = 7 ;
scaleH = 6 ; scaleW = 7 ; J = imresize(newmap,[scaleW scaleH]); % Try varying the scale factor. disp(J); 여기에 다양한 보간(Interpolation) 방법이 있는데 그냥 기본으로 했다.
14
Q&A Thank you
Similar presentations