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;