图像分割

xiaoxiao2021-02-28  106

function digitalDivide_Callback(hObject, eventdata, handles) % hObject handle to digitalDivide (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) global Img_noNoise global Img_Divide global t1 global n global isnoNoise global isDivide isDivide = 0; Img_Divide = Img_noNoise; [rowBit, colBit] = find(Img_Divide == 1); %找到字符的最大范围 rowBit与colBit都是与字符像素点个数相同的一维数组 imin=min(rowBit); imax=max(rowBit); jmin=min(colBit); jmax=max(colBit); %下面的代码用于标识出每个字符的范围 flag = false;%flag 用作是否进入一个字符分割的标志 k = 1; for j = jmin : jmax + 1 if (max(size(find(Img_Divide(imin : imax, j) == 1))) - 1) == 0 %在第j列中没有找到像素为1(白点, 代表字符)的点 if flag == true; t1(1, k) = j - 1; %t1的第一行偶数记录分割数字的右边界 k = k + 1; flag = false; end else%在第j列中存在像素为1(白点,代表字符)的点 if flag == false flag = true; t1(1, k) = j; %t1的第一行奇数记录分割数字的左边界 k = k + 1; end end end n = max(size(t1)) / 2;%m为待识别数字的个数 for i = 1 : n j = 2 * i; for k = imin : imax%由上到下寻找上边界 if (max(size(find(Img_noNoise(k, t1(1, j - 1) : t1(1, j)) == 1))) - 1) > 0% 在对应的列中找到了分割数字的上边界 t1(2,j - 1) = k; %t1的第二行奇数列分别记录分割数字的上边界 break; end end end for i = 1 : n j = 2 * i; for k = imax : -1 : imin%由下到上寻找下边界 if (max(size(find(Img_noNoise(k, t1(1, j - 1) : t1(1, j)) == 1))) -1) > 0% 在对应的列中找到了分割数字的下边界 t1(2, j) = k; %t1的第二行偶数列分别记录分割数字的下边界 break; end end end axes(handles.axes1); imshow(Img_noNoise) hold on for i = 1 : n j = 2 * i; plot([t1(1, j-1), t1(1, j)], [t1(2, j-1), t1(2, j-1)], 'red'); plot([t1(1, j-1), t1(1, j)], [t1(2, j), t1(2, j)], 'red'); plot([t1(1, j-1), t1(1, j-1)], [t1(2, j-1), t1(2, j)],'red'); plot([t1(1, j), t1(1, j)], [t1(2, j-1), t1(2, j)], 'red'); end hold off
转载请注明原文地址: https://www.6miu.com/read-62692.html

最新回复(0)