根据运动模型生成运动模糊图像

根据运动模型生成运动模糊图像

具体的步骤:先用程序二生成txt文件——执行主函数即可(参数选择)
1.确定图像退化模型
2.生成退化图像
(ps:以下是用到的函数)
一、函数

%%%%%%%motionblur函数
function h=motionblur(dirangle,winsize)
if nargin<2
    winsize=9;
end
h=zeros(winsize);
ext=(winsize-1)/2;
if (abs(abs(dirangle)-90) >=45) & (abs(abs(dirangle)-270)>=45),
    slope=tan(dirangle*pi/180); 
    rloc=round(slope*[-ext:ext]);
    for i=1:winsize,
        h(ext-rloc(i)+1,i)=1;
    end
else
    slope=cot(dirangle*pi/180);
    cloc=round(slope*[-ext:ext]);
    for i=1:winsize,
        h(i,ext-cloc(i)+1)=1;
    end
end

二、图片生成txt文件格式的程序

%%%%%图像数据%%%
rgb = imread('cdl.jpg'); 
% 打开文件用于保存结果
subplot(121)
image(rgb)%原始图
%%%fid = fopen('JPEG2TXT.txt', 'wt+');%%如果没有找到txt文件则用下面这句
fid = fopen('C:\Users\huawei\Desktop\JPEG2TXT.txt', 'wt+');%%这是我的电脑桌面位置,仿改即可
if fid == -1, return, end % 写文件,按照红绿蓝顺序,每种颜色写成矩阵形式
for i = 1 : 3   
    for r = 1 : size(rgb, 1)       
        fprintf(fid, '%4i', double(rgb(r, :, i)));       
        fprintf(fid, '\n');    
    end
    fprintf(fid, '\n');
end
fclose(fid);
%%打开txt并转成图片
rgb1=load('JPEG2TXT.txt','-ascii');
[r,c]=size(rgb1);
rgb2=permute(reshape(rgb1,[r/3, 3, c]),[1 3 2]);
subplot(122)
image(rgb2/255)%重新用txt 打开的图

三、主程序

%%根据运动模型生成运动模糊图像
load JPEG2TXT.txt;
[m,n]=size(JPEG2TXT);
winsize=input('Blur operator window size (an odd number, default= 9):');
if isempty (winsize), winsize=9;
    elseif rem (winsize,2)==0,
        winsize=winsize+1; 
        disp(['Use odd number for window size =' int2str(winsize)])
end
disp(['1.Linear motion blur;'])
chos=input('Enter a number to choose type of blur applied(default=1):');
if isempty (chos),chos=1;end
if chos==1,
    dirangle=input('Bluring direction(an angle in degrees, default=45)=');
    if isempty(dirangle)
        dirangle=45;
    end
    h=motionblur(dirangle,winsize);%%%调用运动模糊函数生成模糊模型
end
%%根据模糊模型生成模糊图像
F=fft2(JPEG2TXT);
Hmat=fft2(h,372,200);%%%%%%%%%%%%%%特别注意,这里的维度要统一,即图像的像素大小
Gmat=F.*Hmat;
g=ifft2(Gmat);
figure(1)
subplot(121),imagesc(JPEG2TXT),colormap('gray'),title('originalimage')
subplot(122),imagesc(abs(g)),colormap('gray'),title('blurredimage')
figure(2),
subplot(212),imagesc(log(1+abs(Gmat))),colormap('gray'),title('blurring filter')
subplot(211),imagesc(h),colormap('gray'),title('blurring filtermask')

五、采用顺序统计滤波器对图像进行滤波主程序

%%采用顺序统计滤波器对图像进行滤波
img=rgb2gray(imread('cdl.png'));
figure;imshow(img);
img=double(imnoise(img,'salt & pepper',0.1));
figure,imshow(img,[]);
%%采用均值滤波
N=5;
h=fspecial('average',N);
I=filter2(h,img);
figure,imshow(I,[])
%%中值滤波
I=medfilt2(img,[N N]);
figure,imshow(I,[])
%%最大值滤波
I=ordfilt2(img,N*N,true(N));
figure,imshow(I,[])
%%最小值滤波
I=ordfilt2(img,1,true(N));
figure,imshow(I,[])
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值