思路:图像分割
算法:meanshift
参数:半径为r=2
代码:
clear all;
close all;
clc;
filename = dir('flower\*.jpg');
for nn = 2 : length(filename)
fullname = strcat('flower\', filename(nn).name);
r=2; %滤波半径
img=imread(fullname);
img1 = img(:,:,1);
img2 = img(:,:,2);
img3 = img(:,:,3);
re = zeros(size(img));
for kk = 1 : 3
if kk == 1
img = img1;
end
if kk == 2
img = img2;
end
if kk == 3
img = img3;
end
img=double(img);
[m n]=size(img);
imgn=zeros(m+2*r+1,n+2*r+1);
imgn(r+1:m+r,r+1:n+r)=img;
imgn(1:r,r+1:n+r)=img(1:r,1:n);
imgn(1:m+r,n+r+1:n+2*r+1)=imgn(1:m+r,n:n+r);
imgn(m+r+1:m+2*r+1,r+1:n+2*r+1)=imgn(m:m+r,r+1:n+2*r+1);
imgn(1:m+2*r+1,1:r)=imgn(1:m+2*r+1,r+1:2*r);
%imshow(mat2gray(imgn))
for i=1+r:m+r
for j=1+r:n+r
ser=imgn(i-r:i+r,j-r:j+r);
ser=reshape(ser,[1 (2*r+1)^2]); %将二维模板变为一维
imgn(i,j)=mean_shift(ser,2*r^2+2*r+1); %取模板最中间的那个值作为迭代初值
end
end
imgn=imgn(r+1:m+r,r+1:n+r);
re(:,:,kk) = imgn;
end
re = uint8(re);
imwrite(re,strcat('flower\processed', filename(nn).name),'jpg')
end
效果截图