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

本文共 2635 字,大约阅读时间需要 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结果

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

转载于:https://www.cnblogs.com/tiandsp/archive/2012/11/26/2789881.html

你可能感兴趣的文章
SSH 免密登录
查看>>
微服务实战:从架构到发布(一)
查看>>
Linux命令
查看>>
Win 7 下 C++ 编译环境 MSYS2 MinGW 64-bit + Visual Studio Code
查看>>
Nginx 通过 Lua + Redis 实现动态封禁 IP
查看>>
第十七天-企业应用架构模式-会话状态模式
查看>>
Objective-C中的associated object释放时机问题
查看>>
PAT A1060 科学记数法经典例题(全string库解决)
查看>>
权威指南: 如何写好用户故事?
查看>>
Spring - Configuration Metadata
查看>>
最新全国手机号码归属地信息SQLite数据库2019年2月更新
查看>>
Spring Cloud与Docker微服务架构实战--阅读笔记
查看>>
JS中创建对象的几种设计模式
查看>>
HTML表单提交的安全问题
查看>>
视频云肖长杰:视频AI科技助力短视频生态
查看>>
Android 开发面经,历时两月斩获BAT+头条四个公司 Offer
查看>>
第六天-《企业应用架构模式》-会话状态
查看>>
怎么才能知道自己想做什么呢?
查看>>
程序员是贫寒学子翻身的不二途径,你知道狼性文化吗?
查看>>
微信小程序计算用户离商家的距离(利用经纬度求距)
查看>>