09:48:25
從一個無知角落里開始,蹣跚學步,一個未知到另一個未知,在跌跌撞撞中越走越快,越走越遠,最后宇宙也為之開源。對於探索者來說,最后他們的思想總是變得和自己的足跡一樣偉大。
該項目目前可以實現
- 圖像的預處理包括:灰度化,二值化(公式假設是良好的數學公式截屏圖片)
- 圖像的最小外接矩求解;
- 圖像的切割(part)
2021-05-02 20:24:30
Cut_Imageju:實現最小外接矩
%%實現最小外接矩的函數Cut_Imageju %column的意思是按列來排列,為行向量 %row的意思是按行來排列,為列向量 %0黑1白,字符以黑色為顯示 %尋找第一個字母長度,先分割出來全部字符,之后在對分割的這些部分進行寬度處理,要不處理不了; function Img_out=Cut_Imageju(Img_in) [m,n]=size(Img_in);% x是行數,y是列數 column=sum(Img_in); %尋找左邊界 left=1; num1=max(column); for i = 1 :n if column(i)~=num1 left=i; break end end %尋找右邊界 right=n; for i = n :-1:1 if column(i)~=num1 right=i; break end end row=sum(Img_in,2); num2=max(row); %尋找上邊界 up=1; for j = 1 :m if row(j)~=num2 up=j; break end end %尋找下邊界 down=m; for j = m:-1:1 if row(j)~=num2 down=j; break end end %裁剪圖像 Img_out=Img_in(up:down,left:right); end
切割字符,並且獲得切割后的源量
Cut_Imageqie
%切分字符的函數Cut_Imageqie %只按列切割,切成一列列 %column的意思是按列來排列,為行向量 %row的意思是按行來排列,為列向量 %0黑1白,字符以黑色為顯示 %尋找第一個字母長度,先分割出來全部字符,之后在對分割的這些部分進行寬度處理,要不處理不了; %切分字符的函數Cut_Imageqie %只按列切割,切成一列列 %%[Img_out1,Img_out2]分別代表切割下的圖像和切割后的原圖像 function [Img_out1,Img_out2]=Cut_Imageqie(Img_in) [m,n]=size(Img_in); column=sum(Img_in); wide=0; num1=max(column); for i = 1:n if column(i)~=num1 wide=wide+1; else newleft=i; break end end Img_out1=imcrop(Img_in,[1,1,wide,m]); Img_out2=Img_in(1:m,newleft:n); end
總函數:
%%垂直投影切割函數2 %%將之前函數片段化函數化,實現從原圖像中分割字符 %%王 5/2 16點18分 %清屏 clc; close all; clear all; %讀數 Img=imread('D:\data\matlabrecognizedata\rawpicture\pic2.png');%按實際路徑分析 figure,subplot(1,2,1),imshow(Img),title('原圖'); %灰度化和二值化 Img_Gray=rgb2gray(Img); Img_Binary=imbinarize(Img_Gray,0.57);%采用0.57做閾值; %求外接矩 Img_Cut=Cut_Imageju(Img_Binary); subplot(1,2,2),imshow(Img_Cut),title('外接矩'); %分割圖像 [word1,Img_Cut]=Cut_Imageqie(Img_Cut); figure,subplot(1,3,1),imshow(word1),title('初次切'); subplot(1,3,2),imshow(Img_Cut),title('切后的原圖形'); word1=Cut_Imageju(word1); subplot(1,3,3),imshow(word1),title('后切');
該項目還不能實現
- 圖像的切割太過於依靠手動操作,並不能自動分析間隔,沒有可以使他自動停止的標准
- 只局限於字母和單獨的式子,主要是因為采取了垂直投影分割法,識別的東西一定是獨體,但是像分數,根號或者其他字符的組合,就失敗了,后期會考慮連通域算法;
- 不能實現識別;