%使用边缘改进全局阈值处理
clc; clear all; close all;
sourcPic = imread('19.jpg');
I =rgb2gray(sourcPic);
%T=graythresh(I);
%平滑
w=fspecial('average',20);
I=imfilter(I,w,'replicate');
f=im2double(I);
%sx=fspecial('prewitt');%用于边缘增强
sx=fspecial('sobel'); %fspecial函数用于建立预定义的滤波算子
sy=sx';%‘代表矩阵转置
gx=imfilter(f,sx,'replicate');%对任意类型数组或多维图像进行滤波 ,'replicate'图像通过外边界值来拓展
gy=imfilter(f,sy,'replicate');
grad=sqrt(gx.*gx+gy.*gy);
grad=grad/max(grad(:));
h=imhist(grad);
Q=percentile2i(h,0.95);%计算给定百分比的灰度值
markerImage=grad>Q;
%细化
markerImage=bwmorph(markerImage,'thin',Inf);
%腐蚀
markerImage=bwareaopen(markerImage,1000);%;将小于2000像素的单元去掉
%markerImage = bwmorph(markerImage,'open',Inf); %开运算
%markerImage = bwmorph(markerImage,'bridge',Inf);%连接断开的像素。也就是将0值像素置1如果他有两个非零的不相连(8邻域)的像素
%markerImage = bwmorph(markerImage,'fill',Inf);%填充中间的洞
%markerImage = bwmorph(markerImage,'majority',Inf);
markerImage = bwmorph(markerImage, 'spur',Inf);%去毛刺
figure,imshow(markerImage);
fp=f.*markerImage;
figure,imshow(fp);
%hp=imhist(fp);
%hp(1)=0;
%bar(hp,0);
%T=otsuthresh(hp);%给定直方图最佳阈值
%g=im2bw(f,T);
%figure,imshow(g);
评论0