基于超拉普拉斯先验的图像去运动模糊LUT

要求模糊图像:频域圆边界 + 高斯模糊

不是专业学图像处理的,就是用一下。

%mathematica建表

\[Alpha] = 1/2;

i = 1;

j = 1;

\[Beta] = 8;

v = Range[-0.6, 0.6, 0.00012];

starttime = TimeUsed[]

LUTw = Table[

  Minimize[Abs[w]^(1/2) + \[Beta]/2*(w - v[[j]])^2, w], {j, 10001}];

Dimensions[LUTw];

findw = LUTw[[All, 2]];

findw = w /. findw  //结果

Dimensions[m];

overtime = TimeUsed[] - starttime

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

%matlab程序

function [I] = deblurring_adm_aniso(B, k)

B=imread('图像绝对路径');

w=xlsread('表');

len=41;

theta=0;

k=fspecial('motion',len,theta);

B=B(:,:,1);

imshow(B);

figure;

I=B;

[hang,lie]=size(I);

beta=256;

gamma=600/beta;

Ix=[diff(I,1,2),I(:,1)-I(:,lie)];

Iy=[diff(I,1,1);I(1,:)-I(hang,:)];

[Nomin1,Denom1,Denom2,FFx,FFy]=mine(I,k,Ix,Iy);

Denom = gamma.*Denom1 + Denom2;

vx=double(Ix)/255.0;

for i=1:hang;

    for j=1:lie   

        [~,Index] =min(abs(w-vx(i,j)));%Index

        wx(i,j)=w(Index);

    end

end

vy=fix(double(Iy))/255.0;

for i=1:hang;

    for j=1:lie   

        [~,Index] =min(abs(w-vy(i,j)));%Index

        wy(i,j)=w(Index);

    end

end

Wx=fft2(wx);

Wy=fft2(wy);

Fyout=(conj(FFx).*Wx+conj(FFy).*Wy+gamma.*(Nomin1))./Denom;

Iout=uint8(real(ifft2(Fyout)));

imshow(Iout);

function[Nomin1,Denom1,Denom2,FFx,FFy]=mine(y,k,ix,iy);

sizey=size(y);

otfk=psf2otf(k,sizey);

Nomin1=conj(otfk).*fft2(y);

Denom1=abs(otfk).*conj(abs(otfk));

FFx=abs(conj(psf2otf([1,-1],sizey)));

FFy=abs(conj(psf2otf([1;-1],sizey)));

Denom2=abs(psf2otf([1,-1],sizey)).*abs(conj(psf2otf([1,-1],sizey)))+abs(psf2otf([1;-1],sizey)).*abs(conj(psf2otf([1;-1],sizey)));

去运动模糊前

去运动模糊后

有效。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容