Detecting text from image with perspective distorted using matlab

Can anyone know different methods to detect text from perspective distorted image using matlab or any code. This opencv is better than matlab for text detection.

+3


source to share


1 answer


I think matlab is good for text detection (ocr). There are several libraries for ocr. The most important ones are:

Tesseract is considered to be one of the most accurate open source open source OCR engines currently available.

I have been working on a perspective distortion ocr and I am using the matlab-tesseract library.



I have an issue with perspective distorting perspective with image rotation by finding the border of the image and its lines using the houghlines method .

I will share my code snippet and hope it gives you an idea of ​​this problem.

        function [ output_args ] = rotate_image(  )
         clc;
         close all;
         clear; 

         I = imread("any_images")
         I2 = imcrop(I,[85 150 590 480]);
         I3 = imcrop(I2,[-85 0 440 480]);
         imwrite (I3,'original.tiff', 'Resolution', 300);
        thresh = graythresh(I3);
        Bimage = im2bw(I3, thresh);
        Bimage = edge(Bimage,'sobel');
        [H, T, R] = hough(Bimage);%,'RhoResolution',0.1,'Theta',[-90,0]);
        P  = houghpeaks(H,10);%,'threshold',ceil(0.3*max(H(:))));
        % Find lines and plot them
        lines = houghlines(Bimage,T,R,P);%,'FillGap',100,'MinLength',5);
        figure, imshow(I3), hold on
        max_len = 0;
        for k = 1:length(lines)
            xy = [lines(k).point1; lines(k).point2];
            len = norm(lines(k).point1 - lines(k).point2);
            if ( len > max_len)
                max_len = len;
                xy_long = xy;
            end
        end

    % highlight the longest line segment
    plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','blue');
    a = -xy_long(1,1) + xy_long(2,1);    
    b = -xy_long(1,2) + xy_long(2,2);

    angle=180-atand(b/a);

    if angle > 180
        angle = angle-180;
    end

    angle
    B = imresize(I3, 2);

   if angle > 90
        B =  imrotate(B, 90 - angle ,'bilinear','crop');
   else 
        B =  imrotate(B, -angle,'bilinear','crop');
   end

   imwrite (B,'rotated_image.tiff', 'Resolution', 300);

 end  

      

+2


source







All Articles