《数字图像处理》课程实验报告实验名2:图像复原模型建立实验院系:班级:姓名:学号:哈尔滨工业大学
电气工程及自动化学院
光电信息工程
2015年12月13日
一、实验原理
二、实验内容
三、实验结果与分析
附主要程序代码:
%桶形失真演示程序
%Ref:
%
clc;clear;close all;
X=imread('C:\Documentsand Settings\Administrator\桌面\4.1.01.tiff');%读入图像X=rgb2gray(X);
X=double(X);
[M,N]=size(X);%获取图像的size
%M=32;N=M;
[x,y]=meshgrid(0:N-1,0:M-1);%生成网格矩阵坐标
x =x-[N-1]/2;%平移中心坐标至原点
y =y-[M-1]/2;%平移中心坐标至原点
r =abs(x+i*y);%极坐标关系的极径
r =r/max(r(:));%极坐标关系的极径:归一化
a =+0.4;K=1;%参数设置
xp =a*x.*r+x*[K-abs(a)];%失真后的坐标
yp =a*y.*r+y*[K-abs(a)];%失真后的坐标
%plot(x(:),y(:),'+');%绘图演示点阵效果
%hold on;
%plot(xp(:),yp(:),'o');%绘图演示点阵效果
dx =xp-x; %计算出位移dx
dy =yp-y; %计算出位移dy
Xp =interp2(x,y,X,x+dx,y+dy);%插值获得桶形失真后的图像
subplot(221);I1=imshow(X,[]);%显示原始图像
subplot(222);I2=imshow(Xp,[]);%显示桶形失真的图像
ti =title(['参数a =',num2str(a)],'Color','r');%显示参数值
Xq =interp2(x,y,Xp,x-dx,y-dy);%恢复桶形失真的图像
subplot(223);I3=imshow(Xq,[]);%显示恢复后的图像
set(gcf,'Name','桶形失真演示系统');%设置图像名称
Pu1=uicontrol(gcf,'Units','N','Position',[0.5,0.4,0.13,0.08],...
'Style','Push','String','选择图像',...
'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'[fname,pname]=uigetfile(''*.tiff'');',...
'if pname~=0;X=imread([pname,fname]);',...
'X =rgb2gray(X);X=double(X);set(I1,''CData'',X);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x+dx,y+dy);',...
'Xq =interp2(x,y,Xp,x-dx,y-dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);end;']);%生成按钮控件,该控件用于选择图像
%Callback 部分是计算程序,实时地计算显示失真结果
S1=uicontrol(gcf,'Units','N','Position',[0.7,0.1,0.03,0.4],...
'Style','slide','min',0,'max',0.6,'value',0.3,...
'SliderStep',[0.01,0.01],...
'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'a =get(S1,''Value'');',...
'set(ti,''String'',[''参数a='',num2str(a)]);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x+dx,y+dy);',...
'Xq =interp2(x,y,Xp,x-dx,y-dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);']);%生成滑动条控件,用于改变参数
%Callback 部分是计算程序,实时地计算显示失真结果;
%枕形失真演示程序
clc;clear;close all;
X=imread('C:\Documentsand Settings\Administrator\桌面\4.1.01.tiff');%读入图像X=rgb2gray(X);
X=double(X);
[M,N]=size(X);%获取图像数据的size
%M=32;N=M;
[x,y]=meshgrid(0:N-1,0:M-1);%生成坐标点阵坐标
x =x-[N-1]/2;%平移中心坐标至原点
y =y-[M-1]/2;%平移中心坐标至原点
r =abs(x+i*y);%极坐标关系的极径
r =r/max(r(:));%极坐标关系的极径:归一化
a =+0.4;K=1;%参数设置
xp =a*x.*r+x*[K-abs(a)];%失真后的坐标
yp =a*y.*r+y*[K-abs(a)];%失真后的坐标
%plot(x(:),y(:),'+');%绘图演示点阵效果
%hold on;
%plot(xp(:),yp(:),'o');%绘图演示点阵效果
dx =xp-x; %计算出位移dx
dy =yp-y; %计算出位移dy
Xp =interp2(x,y,X,x-dx,y-dy);%插值获得桶形失真后的图像
subplot(221);I1=imshow(X,[]);%显示原始图像
subplot(222);I2=imshow(Xp,[]);%显示桶形失真的图像
Xq =interp2(x,y,Xp,x+dx,y+dy);%恢复桶形失真的图像
ti =title(['参数a =',num2str(a)],'Color','r');%显示参数值subplot(223);I3=imshow(Xq,[]);%显示恢复后的图像
set(gcf,'Name','枕形失真演示系统');%设置图像名称
Pu1=uicontrol(gcf,'Units','N','Position',[0.5,0.4,0.13,0.08],...
'Style','Push','String','选择图像',...
'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'[fname,pname]=uigetfile(''*.tiff'');',...
'if pname~=0;X=imread([pname,fname]);',...
'X =rgb2gray(X);X=double(X);set(I1,''CData'',X);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x-dx,y-dy);',...
'Xq =interp2(x,y,Xp,x+dx,y+dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);end;']);%生成按钮控件,该控件用于选择图像%Callback 部分是计算程序,实时地计算显示失真结果
S1=uicontrol(gcf,'Units','N','Position',[0.7,0.1,0.03,0.4],...
'Style','slide','min',0,'max',0.6,'value',0.3,...
'SliderStep',[0.01,0.01],'TooltipString',['a=',num2str(a)],...'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'a =get(S1,''Value'');',...
'set(S1,''TooltipString'',[''a='',num2str(a)]);',...
'set(ti,''String'',[''参数a='',num2str(a)]);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x-dx,y-dy);',...
'Xq =interp2(x,y,Xp,x+dx,y+dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);']);%生成滑动条控件,用于改变参数
%Callback 部分是计算程序,实时地计算显示失真结果
运动恢复:
I =imread('C:\Documentsand Settings\Administrator\桌面\4.1.01.tiff');imshow(I)
BW1=edge(I,'sobel');
BW2=edge(I,'canny');
imshow(BW1)
figure, imshow(BW2)
《数字图像处理》课程实验报告实验名2:图像复原模型建立实验院系:班级:姓名:学号:哈尔滨工业大学
电气工程及自动化学院
光电信息工程
2015年12月13日
一、实验原理
二、实验内容
三、实验结果与分析
附主要程序代码:
%桶形失真演示程序
%Ref:
%
clc;clear;close all;
X=imread('C:\Documentsand Settings\Administrator\桌面\4.1.01.tiff');%读入图像X=rgb2gray(X);
X=double(X);
[M,N]=size(X);%获取图像的size
%M=32;N=M;
[x,y]=meshgrid(0:N-1,0:M-1);%生成网格矩阵坐标
x =x-[N-1]/2;%平移中心坐标至原点
y =y-[M-1]/2;%平移中心坐标至原点
r =abs(x+i*y);%极坐标关系的极径
r =r/max(r(:));%极坐标关系的极径:归一化
a =+0.4;K=1;%参数设置
xp =a*x.*r+x*[K-abs(a)];%失真后的坐标
yp =a*y.*r+y*[K-abs(a)];%失真后的坐标
%plot(x(:),y(:),'+');%绘图演示点阵效果
%hold on;
%plot(xp(:),yp(:),'o');%绘图演示点阵效果
dx =xp-x; %计算出位移dx
dy =yp-y; %计算出位移dy
Xp =interp2(x,y,X,x+dx,y+dy);%插值获得桶形失真后的图像
subplot(221);I1=imshow(X,[]);%显示原始图像
subplot(222);I2=imshow(Xp,[]);%显示桶形失真的图像
ti =title(['参数a =',num2str(a)],'Color','r');%显示参数值
Xq =interp2(x,y,Xp,x-dx,y-dy);%恢复桶形失真的图像
subplot(223);I3=imshow(Xq,[]);%显示恢复后的图像
set(gcf,'Name','桶形失真演示系统');%设置图像名称
Pu1=uicontrol(gcf,'Units','N','Position',[0.5,0.4,0.13,0.08],...
'Style','Push','String','选择图像',...
'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'[fname,pname]=uigetfile(''*.tiff'');',...
'if pname~=0;X=imread([pname,fname]);',...
'X =rgb2gray(X);X=double(X);set(I1,''CData'',X);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x+dx,y+dy);',...
'Xq =interp2(x,y,Xp,x-dx,y-dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);end;']);%生成按钮控件,该控件用于选择图像
%Callback 部分是计算程序,实时地计算显示失真结果
S1=uicontrol(gcf,'Units','N','Position',[0.7,0.1,0.03,0.4],...
'Style','slide','min',0,'max',0.6,'value',0.3,...
'SliderStep',[0.01,0.01],...
'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'a =get(S1,''Value'');',...
'set(ti,''String'',[''参数a='',num2str(a)]);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x+dx,y+dy);',...
'Xq =interp2(x,y,Xp,x-dx,y-dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);']);%生成滑动条控件,用于改变参数
%Callback 部分是计算程序,实时地计算显示失真结果;
%枕形失真演示程序
clc;clear;close all;
X=imread('C:\Documentsand Settings\Administrator\桌面\4.1.01.tiff');%读入图像X=rgb2gray(X);
X=double(X);
[M,N]=size(X);%获取图像数据的size
%M=32;N=M;
[x,y]=meshgrid(0:N-1,0:M-1);%生成坐标点阵坐标
x =x-[N-1]/2;%平移中心坐标至原点
y =y-[M-1]/2;%平移中心坐标至原点
r =abs(x+i*y);%极坐标关系的极径
r =r/max(r(:));%极坐标关系的极径:归一化
a =+0.4;K=1;%参数设置
xp =a*x.*r+x*[K-abs(a)];%失真后的坐标
yp =a*y.*r+y*[K-abs(a)];%失真后的坐标
%plot(x(:),y(:),'+');%绘图演示点阵效果
%hold on;
%plot(xp(:),yp(:),'o');%绘图演示点阵效果
dx =xp-x; %计算出位移dx
dy =yp-y; %计算出位移dy
Xp =interp2(x,y,X,x-dx,y-dy);%插值获得桶形失真后的图像
subplot(221);I1=imshow(X,[]);%显示原始图像
subplot(222);I2=imshow(Xp,[]);%显示桶形失真的图像
Xq =interp2(x,y,Xp,x+dx,y+dy);%恢复桶形失真的图像
ti =title(['参数a =',num2str(a)],'Color','r');%显示参数值subplot(223);I3=imshow(Xq,[]);%显示恢复后的图像
set(gcf,'Name','枕形失真演示系统');%设置图像名称
Pu1=uicontrol(gcf,'Units','N','Position',[0.5,0.4,0.13,0.08],...
'Style','Push','String','选择图像',...
'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'[fname,pname]=uigetfile(''*.tiff'');',...
'if pname~=0;X=imread([pname,fname]);',...
'X =rgb2gray(X);X=double(X);set(I1,''CData'',X);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x-dx,y-dy);',...
'Xq =interp2(x,y,Xp,x+dx,y+dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);end;']);%生成按钮控件,该控件用于选择图像%Callback 部分是计算程序,实时地计算显示失真结果
S1=uicontrol(gcf,'Units','N','Position',[0.7,0.1,0.03,0.4],...
'Style','slide','min',0,'max',0.6,'value',0.3,...
'SliderStep',[0.01,0.01],'TooltipString',['a=',num2str(a)],...'HorizontalAlignment','Left','Fontsize',10,'Callback',[...
'a =get(S1,''Value'');',...
'set(S1,''TooltipString'',[''a='',num2str(a)]);',...
'set(ti,''String'',[''参数a='',num2str(a)]);',...
'xp =a*x.*r+x*[K-abs(a)];yp=a*y.*r+y*[K-abs(a)];',...
'dx =xp-x;dy =yp-y;Xp =interp2(x,y,X,x-dx,y-dy);',...
'Xq =interp2(x,y,Xp,x+dx,y+dy);',...
'set(I2,''CData'',Xp);',...
'set(I3,''CData'',Xq);']);%生成滑动条控件,用于改变参数
%Callback 部分是计算程序,实时地计算显示失真结果
运动恢复:
I =imread('C:\Documentsand Settings\Administrator\桌面\4.1.01.tiff');imshow(I)
BW1=edge(I,'sobel');
BW2=edge(I,'canny');
imshow(BW1)
figure, imshow(BW2)