论程序员如何画水粉画

思路:图像分割

算法: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

效果截图


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值