思路:图像分割
算法: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