www.gusucode.com > matlab程序语言实现的水准网平差程序,使用于测绘人员 > 一种基于极大值稳定区域的文本定位方法matlab源码程序/毕业设计/代码/line_filter.m

    function [mserRegions,mserStats]=line_filter(mserStats,mserRegions,grayImage)
%笔划宽度过滤
%随机抽取
regionImage = mserStats(1).Image;
regionImage = padarray(regionImage, [1 1]);

distanceImage = bwdist(~regionImage);
skeletonImage = bwmorph(regionImage, 'thin', inf);%字形骨架
strokeWidthImage = distanceImage;
strokeWidthImage(~skeletonImage) = 0;

% %字形提取
% figure
% subplot(1,2,1)
% imagesc(regionImage)
% title('Region Image')
% 
% subplot(1,2,2)
% imagesc(strokeWidthImage)
% title('Stroke Width Image')

% 计算笔画宽度
strokeWidthValues = distanceImage(skeletonImage);
strokeWidthMetric =  std(strokeWidthValues)/mean(strokeWidthValues);

%设定宽度阈值
strokeWidthThreshold = 0.6;  
strokeWidthFilterIdx = strokeWidthMetric > strokeWidthThreshold;

for j = 1:numel(mserStats)

	regionImage = mserStats(j).Image;
	regionImage = padarray(regionImage, [1 1], 0);
     
	distanceImage = bwdist(~regionImage);
	skeletonImage = bwmorph(regionImage, 'thin', inf);
     
	strokeWidthValues = distanceImage(skeletonImage);

	strokeWidthMetric =  std(strokeWidthValues)/mean(strokeWidthValues);
   
	strokeWidthFilterIdx(j) = strokeWidthMetric > strokeWidthThreshold;
end

mserRegions(strokeWidthFilterIdx) = [];
mserStats(strokeWidthFilterIdx) = [];

% 
% % 画框 
% broder=[mserStats.BoundingBox];
% figure
% imshow(grayImage)
% hold on;
% for i=1:mserRegions.Count  
%     leftx=broder((i-1)*4+1);
%     lefty=broder((i-1)*4+2);
%     width=broder((i-1)*4+3);
%     height=broder((i-1)*4+4);
%    
%     rectangle('Position',[leftx,lefty,width,height], 'EdgeColor','g');
% end
% hold off;