1 / 14

Image Processing for OCR using Matlab

Technical seminar. Image Processing for OCR using Matlab. 이근호 fiadot@gmail.com http://www.fiadot.com. July 25,2007. Contents. About Matlab Drawing Binarization Labelling Segmentation Normalize Q&A. Matlab. 매트웍스사에서 개발한 수치 해석 및 프로그래밍 환경을 제공하는 공학용 소프트웨어

dafydd
Download Presentation

Image Processing for OCR using Matlab

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Technical seminar Image Processing for OCRusing Matlab 이근호 fiadot@gmail.com http://www.fiadot.com July25,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 255 0 0 0 255 255 255 255 0 255 255 255 255 0 0 0 0 255 255 255 0 255 255 0 0 255 255 255 0 255 255 255 0 255 255 255 0 255 0 255 0 255 255 255 255 255 255 255 0 255 255 255 0 255 255 255 0 255 255 255 255 255 255 0 0 255 255 255 0 255 255 255 0 255 255 255 255 255 0 255 0 255 255 255 0 255 255 255 0 255 255 255 255 0 255 255 255 0 0 0 255 255 255 255 0 255 255 255 0 0 0 0 Columns 17 through 32 … <생략> Columns 49 through 60 255 0 0 0 255 255 255 0 0 0 255 255 0 255 255 255 0 255 0 255 255 255 0 255 0 255 255 255 0 255 0 255 255 255 0 255 255 0 0 0 255 255 0 255 255 255 0 255 0 255 255 255 0 255 255 0 0 0 0 255 0 255 255 255 0 255 0 255 255 255 0 255 255 0 0 0 255 255 255 0 0 0 255 255 >> 

  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 = 1 1 1 0 0 0 0 0 1 1 1 0 2 2 0 0 1 1 1 0 2 2 0 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 0 3 0 1 1 1 0 0 3 3 0 1 1 1 0 0 0 0 0 [r,c] = find(L==2); rc = [r c] rc = 2 5 3 5 2 6 3 6 bwlabel % 1차원 데이터에 대해서~ Label connected components in a binary image 사용법 L = bwlabel(BW,n) [L,num] = bwlabel(BW,n) 사용예 BW = [1 1 1 0 0 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 0 1 0 1 1 1 0 0 1 1 0 1 1 1 0 0 0 0 0]; L = bwlabel(BW,4)

  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) = 1 1 0 0 0 0 2 0 0 ans(:,:,2) = 0 1 0 0 0 0 0 2 0 ans(:,:,3) = 0 1 1 0 0 0 0 0 2

  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 18x54 7776 double array info 1x1 5060 struct array pszDBFileName 1x18 36 char array pszSrcFileName 1x19 38 char array raw_rgbimage 7x60x3 1260 uint8 array raw_rgbimage2 18x54 972 logical array

  12. Segmentaion 나누어진 문자 하나의 크기를 확인한다. 결과> splited char size 12 7 stats = regionprops(LabledData,'FilledImage'); newmap = [stats(3).FilledImage]; % disp(newmap); 라벨링후 3에 해당하는 이미지 영역을 긁어서newmap에 새로운 2차원 배열을 복사 생성한다. 결과> 0 0 1 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 [h w] = size(newmap); disp('splited char size'); disp(h); disp(w);

  13. Normalization • 사이즈를 DB에 맞게 resize 시켜준다. scaleH = 6 ; scaleW = 7 ; J = imresize(newmap,[scaleWscaleH]); % Try varying the scale factor. disp(J); 여기에 다양한 보간(Interpolation) 방법이 있는데 그냥 기본으로 했다.

  14. Q&A Thank you

More Related