博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
matlab练习程序(径向模糊1)
阅读量:6950 次
发布时间:2019-06-27

本文共 2567 字,大约阅读时间需要 8 分钟。

注:  

  之所以要加1是因为这个还没有做完,这个只是按照自己的想法实现的,结果。。。果然是不行啊。

  photoshop中的径向模糊算法我也不清楚,不过下面的对话框大致可以让人猜到一些:

  看那个小方框就可以了,我感觉是photoshop只在黑色像素对应的地方进行模糊,其他的地方则不处理。我暂时只实现缩放的效果,如何改变品质也还不清楚。

  我的算法是对每一个像素分别计算他的卷积模板,卷积模板就靠卷积半径r和当前像素与图像中心像素的斜率确定。

  下面是代码:

main.m

clear all;close all;clc;r=30;img=imread('lena.jpg');[m n]=size(img);imshow(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);                %扩展左边界cen_y=floor(m/2+r);cen_x=floor(n/2+r);for i=r+1:m+r    for j=r+1:n+r            w=create_mk(i,j,cen_y,cen_x,r);                 %制造卷积模板        [H W]=size(w);        HH=floor(H/2);        WW=floor(W/2);        s=imgn(i-HH:i+HH,j-WW:j+WW).*w;        imgn(i,j)=sum(sum(s))/sum(sum(w));            end   endimgn=imgn(r+1:m+r,r+1:n+r);figure;imshow(mat2gray(imgn));

create_mk.m

function w=create_mk(i,j,cen_y,cen_x,r)    if j ~=cen_x                            k=(i-cen_y)/(j-cen_x);                  theta=atan(k);        jiaodu=theta*180/pi;        %不用弧度是知道tan(pi/2)是多少    else        jiaodu=90;    end         jiaodu=mod(jiaodu,360);        flag=0;    %%下面是确定卷积模板的宽和高。    if jiaodu>=0 && jiaodu<90     %   jiaodu=jiaodu;        flag=1;    end    if jiaodu>=90 && jiaodu<180        jiaodu=180-jiaodu;        flag=2;    end    if jiaodu>=180 && jiaodu<270        jiaodu=jiaodu-180;        flag=3;    end    if jiaodu>=270 && jiaodu<360        jiaodu=360-jiaodu;        flag=4;    end    H=floor(r*sin(jiaodu*pi/180));    W=floor(r*cos(jiaodu*pi/180));    if mod(H,2)==0        H=H+1;    end    if mod(W,2)==0        W=W+1;    end     w=zeros(H,W);        %%为卷积模板赋值    pre_tmp_y=1;    pre_tmp_x=1;          if W~=1 && H~=1        for i=1:H            for j=1:W                tmp_y=floor(j*tan(jiaodu*pi/180));                if tmp_y==i                    w(pre_tmp_y:tmp_y,j)=r;                    w(pre_tmp_y,pre_tmp_x:j)=r;                    pre_tmp_y=tmp_y;                    pre_tmp_x=j;                 end            end        end        w(H,W)=r;    end    if W==1        for i=1:H            w(i,1)=r;        end    end    if H==1        for j=1:W            w(1,j)=r;        end      end        w=w/sum(sum(w));    if flag==2 || flag==4       %如果角度在2,4象限,卷积矩阵上下翻转        w=flipud(w);            end    end

效果:

原图

这里的效果,半径为30

photoshop数量取61结果

  看到这两张图,我突然明白了屌丝与白富美、国产山寨机与国外智能机的区别。总之,效果差距还是很大的,其实速度差距也很大,算法还要优化。暂时记录到这里。

转载地址:http://thkil.baihongyu.com/

你可能感兴趣的文章
Android log
查看>>
Lucene为不同字段指定不同分词器(转)
查看>>
json字符串-单、双引号
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
运维基础--虚拟机的使用(一)
查看>>
linux高级安全ssh限制利用PAM
查看>>
ocp007 题库解析(1-15)
查看>>
spring mybatis使用时报 java.lang.AbstractMethodError
查看>>
mui ajax请求 登录
查看>>
我的友情链接
查看>>
fir.im Weekly - 2016 年 Android 最佳实践列表
查看>>
异步消息的性能与激情之Netty开发思路
查看>>
我的友情链接
查看>>
Gradle与Makefile构建工具的对比
查看>>
我的友情链接
查看>>
poi导出的excel不能超过256列
查看>>
基于etcd+confd通过nginx对docker服务混合注册发现详解
查看>>
apt-get install
查看>>
JVM中也有并发GC,CMS机制
查看>>
maven的坐标
查看>>