做个记录
边缘检测:
function E = DetectEdge(I) %by:LiFeiteng %Version1.0 灰度图像 2013/5/06 %Version1.1 彩色图像 2013/5/13 if size(I,3)==3 I = rgb2gray(I); end mask = fspecial('gaussian',[3 3],3); I = imfilter(I,mask); I = double(I); fx = conv2(I,[-1 1], 'same'); fy = conv2(I,[-1;1], 'same'); grad = sqrt(fx.^2+fy.^2); % grad = ordfilt2(grad,1,ones(3,3)); t = myOtsu(grad); E = grad > t; %E = grad; end
function T = myOtsu(E) % 大津法 E = uint8(E); E = E(:); MN = size(E,1); t = 0; g = []; for i=1:256 n0 = E <= t; n1 = E > t; N0 = sum(n0); N1 = sum(n1); w0 = N0/MN; w1 = N1/MN; mu0 = sum(E(n0))/N0; mu1 = sum(E(n1))/N1; mu = w0*mu0 + w1*mu1; g(1,i) = w0*(mu0-mu)^2 + w1*(mu1-mu)^2; t = t+1; end [~, index] = max(g); T = mean(index-1);
img = imread('lena.tif'); img = imnoise(img,'gaussian'); figure,imshow(img) E = DetectEdge(img); figure,imshow(E,[])