필터 지우기
필터 지우기

extract text from image

조회 수: 62 (최근 30일)
ahmed
ahmed 2013년 12월 21일
댓글: Image Analyst 2019년 11월 23일
this code extract object random i want to extract letter line by line sequential
%%Image segmentation and extraction
%%Read Image
imagen=imread('image_a.jpg');
%%Show image
figure(1)
imshow(imagen);
title('INPUT IMAGE WITH NOISE')
%%Convert to gray scale
if size(imagen,3)==3 % RGB image
imagen=rgb2gray(imagen);
end
%%Convert to binary image
threshold = graythresh(imagen);
imagen =~im2bw(imagen,threshold);
%%Remove all object containing fewer than 30 pixels
imagen = bwareaopen(imagen,30);
pause(1)
%%Show image binary image
figure(2)
imshow(~imagen);
title('INPUT IMAGE WITHOUT NOISE')
%%Label connected components
[L Ne]=bwlabel(imagen);
%%Measure properties of image regions
propied=regionprops(L,'BoundingBox');
hold on
%%Plot Bounding Box
for n=1:size(propied,1)
rectangle('Position',propied(n).BoundingBox,'EdgeColor','g','LineWidth',2)
end
hold off
pause (1)
%%Objects extraction
figure
for n=1:Ne
[r,c] = find(L==n);
n1=imagen(min(r):max(r),min(c):max(c));
imshow(~n1);
pause(0.5)
end
  댓글 수: 1
Image Analyst
Image Analyst 2016년 8월 13일
ahmed hasn't been here in 3 years. You'll have to do it without him. Why not use text() or line()?

댓글을 달려면 로그인하십시오.

채택된 답변

Image Analyst
Image Analyst 2013년 12월 22일
It's not random, though you don't know the algorithm it uses (it's top left to bottom right, column by column).
You will need to find each line and extract it before you label. See attached demo, which will produce this:
There is not OCR package built in to MATLAB. You'll have to find one or do it yourself.
  댓글 수: 20
Walter Roberson
Walter Roberson 2017년 3월 12일
Can it handle what you asked before? No.
oza san
oza san 2017년 3월 12일
ok.sorry for the mistake and thank you for your constructive comments but i test it with some images with multilingual texts and works fine with some errors.what i face is when the fonts are different it is too much poor.is there anyway that helps me to handle it?

댓글을 달려면 로그인하십시오.

추가 답변 (3개)

deeksha h r
deeksha h r 2016년 8월 13일
respected sir,the code used is displaying segmented letter but we need segmented line to be displayed ie each text line from the image is to be displayed.can you please help us with this code

Arvinder singh
Arvinder singh 2017년 11월 1일

https://www.youtube.com/watch?v=qzjE-4yRMCA


Sharad Sirsat
Sharad Sirsat 2019년 11월 23일
You dont need to used "imagen = bwareaopen(imagen,30);" over here, Simply after converting image into binary,Use " bwlabel" to count number of character/objects in an image,After that in an image you can find the centroid of each character and then using Regionprops find their Length, Width to create a bounding box around character.Once you have done bounding box you can crop character individually by giving original image input.
Note: For centroid, bounding box(regionprops) and for imagecrop apply forloop till the counted no of objects/characters.
  댓글 수: 1
Image Analyst
Image Analyst 2019년 11월 23일
But if you don't use bwareaopen(), you'll get a lot of small noise specks that are not letters. Who wants to deal with those????
Plus, if you don't do it like I did, line-by-line, then you'll have labels that are randomly (almost) chosen from each line. To avoid that you'd have to go through some special code, like get the y coordinates of each blob, and use something like kmeans() to find out which blobs are in the same line of text.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Language Support에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by