图像超分辨率重建--图像处理课程设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图4-1 最邻近插值算法实现效果图
在程序中可以直接调用函数也可自行编写。如自行编写,部分源程序如下:
width = K * nrows;
height = K * ncols;
J = uint8(zeros(width,height));
widthScale = nrows/width;
heightScale = ncols/height;
尺度变换的物理含义就放大意义来讲,如果信号在时域进行扩展,即当O<a<1时,则其频谱将在频域进行压缩,信息更集中于低频,高频部分所含信息很少,同时幅值也会增大。根据这一原理,可以对图像频域进行处理以达到图像空间域放大的操作,即将源图像的频域数据作为目标图像频域数据的低频部分,而对于高频进行填零预测,幅值乘以相应的增强系数,再反变换回空间域可实现图像的放大。傅里叶变换由于频域复数运算,在处理及运算上有些复杂,而离散余弦变换是实数变换,可以方便地对应空间域图像。
1.培养严谨的科学态度,正确的设计思想,科学的设计方法和良好的工作作风。
2.培养独立思考的能力,独立检索资料、阅读文献、综合分析、计算机应用、数据及文字处理等能力。
3.培养综合运用基础理论、基本知识的能力。通过课程设计得到工程设计的初步锻炼。
2图像处理系统设计内容及要求
2.1设计内容
图像超分辨率重建是利用低质量或低分辨率图像来产生高质量或高分辨率图像的技术,重建包括空域方法和频域方法。本设计要求用插值技术提高图像的分辨率。
end
end
end
imwrite(J, 'lena2.jpg', 'jpg');
figure;
imshow(J);
4.1.3双三次插值算法
双三次插值是用待插枝点周围16个点作为参考像素值的一种三阶插值方法,典型的双三次插值核函数是:
这里参考值a不同文献中取值不同,a=一1,a=0.5,a=0.75等等。其实现效果如图4-3所示。
B1=blkproc(B,[8 8],'P1*x*P2',T1,T1');
B2=blkproc(B1,[8 8],'P1*x',k);
T2=dctmtx(8.*k);
I=blkproc(B2,[8.*k 8.*k],'P1*x*P2',T2',T2);
figure;
imshow(I);
1课程设计目的
MATLAB7.0软件。MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,代表了当今国际科学计算软件的先进水平。通过用MATLAB对图像进行处理,以实现以下目的。
4.2.2频域重建的方法
根据图像的表示方法以及以上原理,我们可以仅在频域进行处理就可完成对图像的放大操作。对原图像进行DCT正变换得到图像频域数据F(u,v),将F(u,v)作为目标放大图像的低频部分,并与增强系数(根据放大k倍数变化)相乘,对处理后的频域数据进行DCT逆变换即可得到放大后的图像。
(1)对原始图像数据进行处理,对其作DCT正变换。
x21 = double(I(a+1,b)); % x21 <- I(a+1,b)
x22 = double(I(a+1,b+1)); % x22 <- I(a+1,b+1)
J(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx) * x12) );% calculate J(x,y)
图4-2双线性插值算法实现效果图
在程序中可以直接调用函数也可自行编写。如自行编写,部分源程序如下:
width = K * nrows;
height = K * ncols;
J = uint8(zeros(width,height));
widthScale = nrows/width;
heightScale = ncols/height;
for x = 5:width - 5
for y = 5:height - 5
xx = x * widthScale;
yy = y * heightScale;
if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0)
J(x,y) = I(int16(xx),int16(yy));
figure;
imshow(J);
4.1.2双线性插值算法
设f ( x , y )为2个变量的函数,其在单位正方形顶点的值已知。假设希望通过插值得到正方形内任意点的f ( x , y )值。可以令由双线性方程
来定义的一个双曲抛物面与4个已知点拟合。
利用公式实现插值:
双线性插值是对待插值象素周围的4个邻近像素的灰度按照距离进行加权平均,实质上是属于一阶插值。双线性插值的平滑作用有可能会使图像的细节产生退化,当放大倍数比较大的时候,这种现象更加明显。同时,双线性插值的斜率不连续也会产生不希望的结果。其实现效果如图4-2所示。
系统整体设计如图3-2所示。
图3-2系统整体设计图
4功能模块的具体实现
4.1空域插值放大的方法
4.1.1最邻近插值算法
这是最简单的算法,每一个输出像素都赋给输入图象中与其最邻近的采样点的值。插值核函数是:
h(x)=1 0<x<0.5
h(x)=0 0.5<x
在所有的插值方法中,这种插值方法速度最快,早期的应用比较普遍,然而当图像中包含灰度有变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。图像的边缘阶梯失真现象比较明显。其实现效果如图4-1所示。
图4-6 用频域分块重建的效果图
部分源程序代码如下:
x=double(x)/255;
figure(1);
imshow(x);
T=dctmtx(8);
B=blkproc(x,[8 8],'P1*x*P2',T,T');
[m,n]=size(x)
k=2;
T1=[eye(8);zeros(k.*8-8,8)];
(1)利用插值技术将原始图像在空域放大2倍。
(2)在DCT域放大原始图像2倍,设计滤波器在DCT域增强图像的高频信息。
(3)对图像分块进行DCT变换,在DCT域对子图像进行放大和滤波增强高频信息。
(4)比较上述三种图像重建结果,设计软件界面。
(5)设计方案、编写代码实现上述功能。
2.2设计要求
(1)利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。
else% a or b is not integer
a = double(round(xx)); % (a,b) is the base-dot
b = double(round(yy));
J(x,y) = I(a,b);% calculate J(x,y)
end
end
end
imwrite(J, 'lena2.jpg', 'jpg');
for x = 5:width - 5
for y = 5:height - 5
xx = x * widthScale;
yy = y * heightScale;
if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0)% if a and b is integer,then J(x,y) <- I(x,y)
J(x,y) = I(int16(xx),int16(yy));
else
a = double(uint16(xx)); % (a,b) is the base-dot
b = double(uint16(yy));
x11 = double(I(a,b)); % x11 <- I(a,b)
x12 = double(I(a,b+1)); % x12 <- I(a,b+1)
图4-3 双三次插值算法实现效果图
4.2DCT域插值放大的方法
DCT变换的介绍
离散余弦变换是从二种特殊形式的傅里叶变换转化过来的,是一种性能很好的正交变换方式。离散余弦变换本质上仍然是离散傅立叶变换,二者在频域本质上是相同的。离散余弦变换因其是一种实数变换,其变换矩阵的基向量很好地描述了人类视觉的相关性,接近于最佳变换。因而DCT在图像处理中有很广泛的应用,并成为一些静态图像和视频压缩国际标准的基本处理模块,因而采用DCT变换可以很方便地应用于压缩域图像和视频中。数字图像可以通过傅里叶变换、离散余弦变换等由空间域转换到频域中表示,通过对频域的处理可以方便实现空间域较难实现的处理。而空间域和频域又存在一定的联系,为数字图像的处理提供了另一种方法。
(2)能显示输入图像、中间图像和重建的图像。
(3)程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。
(4)完成设计说明书一份。
(5)刻苦钻研,勤于思考,勇于实践,独立完成课程设计任务。
(6)遵守纪律,在指定地点进行课程设计。
(7)掌握有关课程的基本理论和基本知识。概念清楚,方案合理,数据可靠,计算正确,运行良好,图纸(图表)符合标准,设计说明书(论文)撰写规范,答辩中回答问题正确。
3设计方案
根据课程设计题目的要求,设计界面如图3-1所示:
图3-1 设计界面
本设计分为空域放大和DCT域放大两部分,空域放大主要工作有:在空域对现有的传统插值算法分别进行了研究与仿真实验,包括最近邻域插值,双线性插值,双三次插值等,这些插值方法均是通过低通滤波,滤除和过滤图像数据中的高频信息。所以这些插值基函数对边缘和纹理信息都比较丰富的图像的插值效果不是特别理想。DCT域放大主要工作有:通过DCT变换实现了由空间域到频域的转换,通过对频域处理可以方便的实现空间域较难实现的处理。而空间域与频域又存在一定的联系,为数字图像的处理提供了另一种方法。该算法在对整块图像进行处理时,尽管采用了增强系数对图像亮度效果进行补充,但对整幅图像高频部分预测采用填零方式,在图像像素位数增大即图像信息量增大时这种预测精度不如对图像分块处理后高,且基于JPEG格式图像多采用分成8×8子块分块压缩编码,对上述算法进行改进。改进后的算法,将原始图像数据切割成接近8×8大小子块,对每一子块分别实施DCT放大算法。改进后的算法如下:对原始图像进行分块,然后对每一子块运用DCT图像放大算法,最后合并处理所有的子块。
图4-5 频域重建的效果图
部分程序代码如下:
J=dct2(x);%x是读入的图像
[m,n]=size(x)
k=2;
T1=[eye(m);zeros(k.*m-m,m)];
T2=[eye(n);zeros(k.*n-n,n)];
J=T1*J*T2';
J1=k*J;
X=idct2(J);
figure,imshow(log(abs(J-J1)),[]),colormap(jet(64));
%figure,imshow(log(abs(J1)),[]),colormap(jet(64));
figure;
imshow(double(X)/255);
[M,N]=size(X);
4.3频域分块重建的方法
该算法在对整块图像进行处理时,尽管采用了增强系数对图像亮度效果进行补充,但对整幅图像高频部分预测采用填零方式,在图像像素位数增大即图像信息量增大时这种预测精度不如对图像分块处理后高,且基于JPEG格式图像多采用分成8×8子块分块压缩编码,对上述算法进行改进。改进后的算法,将原始图像数据切割成接近8×8大小子块,对每一子块分别实施DCT放大算法。将图像分解为若干子图像,分别进行DCT变换,大大减小了DCT的计算量,提高了算法处理的速度。其实现效果如图4-6所示。
(2)对数据在频域上进行处理,得到放大后的频域。若需将图像放大k×k倍,则放大后的图像大小为M×N,M=[km],N=[kn]([]表示取整运算)。
(3)DCT反变换,将频域处理的数据恢复为图像空间域原始格式。其流程图如图4-4所示。
图4-4DCT放大图像流程图
用DCT处理图像后的效果图如图4-5所示。
在程序中可以直接调用函数也可自行编写。如自行编写,部分源程序如下:
width = K * nrows;
height = K * ncols;
J = uint8(zeros(width,height));
widthScale = nrows/width;
heightScale = ncols/height;
尺度变换的物理含义就放大意义来讲,如果信号在时域进行扩展,即当O<a<1时,则其频谱将在频域进行压缩,信息更集中于低频,高频部分所含信息很少,同时幅值也会增大。根据这一原理,可以对图像频域进行处理以达到图像空间域放大的操作,即将源图像的频域数据作为目标图像频域数据的低频部分,而对于高频进行填零预测,幅值乘以相应的增强系数,再反变换回空间域可实现图像的放大。傅里叶变换由于频域复数运算,在处理及运算上有些复杂,而离散余弦变换是实数变换,可以方便地对应空间域图像。
1.培养严谨的科学态度,正确的设计思想,科学的设计方法和良好的工作作风。
2.培养独立思考的能力,独立检索资料、阅读文献、综合分析、计算机应用、数据及文字处理等能力。
3.培养综合运用基础理论、基本知识的能力。通过课程设计得到工程设计的初步锻炼。
2图像处理系统设计内容及要求
2.1设计内容
图像超分辨率重建是利用低质量或低分辨率图像来产生高质量或高分辨率图像的技术,重建包括空域方法和频域方法。本设计要求用插值技术提高图像的分辨率。
end
end
end
imwrite(J, 'lena2.jpg', 'jpg');
figure;
imshow(J);
4.1.3双三次插值算法
双三次插值是用待插枝点周围16个点作为参考像素值的一种三阶插值方法,典型的双三次插值核函数是:
这里参考值a不同文献中取值不同,a=一1,a=0.5,a=0.75等等。其实现效果如图4-3所示。
B1=blkproc(B,[8 8],'P1*x*P2',T1,T1');
B2=blkproc(B1,[8 8],'P1*x',k);
T2=dctmtx(8.*k);
I=blkproc(B2,[8.*k 8.*k],'P1*x*P2',T2',T2);
figure;
imshow(I);
1课程设计目的
MATLAB7.0软件。MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言的编辑模式,代表了当今国际科学计算软件的先进水平。通过用MATLAB对图像进行处理,以实现以下目的。
4.2.2频域重建的方法
根据图像的表示方法以及以上原理,我们可以仅在频域进行处理就可完成对图像的放大操作。对原图像进行DCT正变换得到图像频域数据F(u,v),将F(u,v)作为目标放大图像的低频部分,并与增强系数(根据放大k倍数变化)相乘,对处理后的频域数据进行DCT逆变换即可得到放大后的图像。
(1)对原始图像数据进行处理,对其作DCT正变换。
x21 = double(I(a+1,b)); % x21 <- I(a+1,b)
x22 = double(I(a+1,b+1)); % x22 <- I(a+1,b+1)
J(x,y) = uint8( (b+1-yy) * ((xx-a)*x21 + (a+1-xx)*x11) + (yy-b) * ((xx-a)*x22 +(a+1-xx) * x12) );% calculate J(x,y)
图4-2双线性插值算法实现效果图
在程序中可以直接调用函数也可自行编写。如自行编写,部分源程序如下:
width = K * nrows;
height = K * ncols;
J = uint8(zeros(width,height));
widthScale = nrows/width;
heightScale = ncols/height;
for x = 5:width - 5
for y = 5:height - 5
xx = x * widthScale;
yy = y * heightScale;
if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0)
J(x,y) = I(int16(xx),int16(yy));
figure;
imshow(J);
4.1.2双线性插值算法
设f ( x , y )为2个变量的函数,其在单位正方形顶点的值已知。假设希望通过插值得到正方形内任意点的f ( x , y )值。可以令由双线性方程
来定义的一个双曲抛物面与4个已知点拟合。
利用公式实现插值:
双线性插值是对待插值象素周围的4个邻近像素的灰度按照距离进行加权平均,实质上是属于一阶插值。双线性插值的平滑作用有可能会使图像的细节产生退化,当放大倍数比较大的时候,这种现象更加明显。同时,双线性插值的斜率不连续也会产生不希望的结果。其实现效果如图4-2所示。
系统整体设计如图3-2所示。
图3-2系统整体设计图
4功能模块的具体实现
4.1空域插值放大的方法
4.1.1最邻近插值算法
这是最简单的算法,每一个输出像素都赋给输入图象中与其最邻近的采样点的值。插值核函数是:
h(x)=1 0<x<0.5
h(x)=0 0.5<x
在所有的插值方法中,这种插值方法速度最快,早期的应用比较普遍,然而当图像中包含灰度有变化的细微结构时,最近邻插值法会在图像中产生人工的痕迹。图像的边缘阶梯失真现象比较明显。其实现效果如图4-1所示。
图4-6 用频域分块重建的效果图
部分源程序代码如下:
x=double(x)/255;
figure(1);
imshow(x);
T=dctmtx(8);
B=blkproc(x,[8 8],'P1*x*P2',T,T');
[m,n]=size(x)
k=2;
T1=[eye(8);zeros(k.*8-8,8)];
(1)利用插值技术将原始图像在空域放大2倍。
(2)在DCT域放大原始图像2倍,设计滤波器在DCT域增强图像的高频信息。
(3)对图像分块进行DCT变换,在DCT域对子图像进行放大和滤波增强高频信息。
(4)比较上述三种图像重建结果,设计软件界面。
(5)设计方案、编写代码实现上述功能。
2.2设计要求
(1)利用数字图像处理技术,以MATLAB为平台,建立一个实现设计主题的简易处理系统。
else% a or b is not integer
a = double(round(xx)); % (a,b) is the base-dot
b = double(round(yy));
J(x,y) = I(a,b);% calculate J(x,y)
end
end
end
imwrite(J, 'lena2.jpg', 'jpg');
for x = 5:width - 5
for y = 5:height - 5
xx = x * widthScale;
yy = y * heightScale;
if (xx/double(uint16(xx)) == 1.0) & (yy/double(uint16(yy)) == 1.0)% if a and b is integer,then J(x,y) <- I(x,y)
J(x,y) = I(int16(xx),int16(yy));
else
a = double(uint16(xx)); % (a,b) is the base-dot
b = double(uint16(yy));
x11 = double(I(a,b)); % x11 <- I(a,b)
x12 = double(I(a,b+1)); % x12 <- I(a,b+1)
图4-3 双三次插值算法实现效果图
4.2DCT域插值放大的方法
DCT变换的介绍
离散余弦变换是从二种特殊形式的傅里叶变换转化过来的,是一种性能很好的正交变换方式。离散余弦变换本质上仍然是离散傅立叶变换,二者在频域本质上是相同的。离散余弦变换因其是一种实数变换,其变换矩阵的基向量很好地描述了人类视觉的相关性,接近于最佳变换。因而DCT在图像处理中有很广泛的应用,并成为一些静态图像和视频压缩国际标准的基本处理模块,因而采用DCT变换可以很方便地应用于压缩域图像和视频中。数字图像可以通过傅里叶变换、离散余弦变换等由空间域转换到频域中表示,通过对频域的处理可以方便实现空间域较难实现的处理。而空间域和频域又存在一定的联系,为数字图像的处理提供了另一种方法。
(2)能显示输入图像、中间图像和重建的图像。
(3)程序代码要有注释说明,调用MATLAB函数要清楚并理解函数的功能、使用范围,在设计说明书中要写清楚函数的功能和参数意义。
(4)完成设计说明书一份。
(5)刻苦钻研,勤于思考,勇于实践,独立完成课程设计任务。
(6)遵守纪律,在指定地点进行课程设计。
(7)掌握有关课程的基本理论和基本知识。概念清楚,方案合理,数据可靠,计算正确,运行良好,图纸(图表)符合标准,设计说明书(论文)撰写规范,答辩中回答问题正确。
3设计方案
根据课程设计题目的要求,设计界面如图3-1所示:
图3-1 设计界面
本设计分为空域放大和DCT域放大两部分,空域放大主要工作有:在空域对现有的传统插值算法分别进行了研究与仿真实验,包括最近邻域插值,双线性插值,双三次插值等,这些插值方法均是通过低通滤波,滤除和过滤图像数据中的高频信息。所以这些插值基函数对边缘和纹理信息都比较丰富的图像的插值效果不是特别理想。DCT域放大主要工作有:通过DCT变换实现了由空间域到频域的转换,通过对频域处理可以方便的实现空间域较难实现的处理。而空间域与频域又存在一定的联系,为数字图像的处理提供了另一种方法。该算法在对整块图像进行处理时,尽管采用了增强系数对图像亮度效果进行补充,但对整幅图像高频部分预测采用填零方式,在图像像素位数增大即图像信息量增大时这种预测精度不如对图像分块处理后高,且基于JPEG格式图像多采用分成8×8子块分块压缩编码,对上述算法进行改进。改进后的算法,将原始图像数据切割成接近8×8大小子块,对每一子块分别实施DCT放大算法。改进后的算法如下:对原始图像进行分块,然后对每一子块运用DCT图像放大算法,最后合并处理所有的子块。
图4-5 频域重建的效果图
部分程序代码如下:
J=dct2(x);%x是读入的图像
[m,n]=size(x)
k=2;
T1=[eye(m);zeros(k.*m-m,m)];
T2=[eye(n);zeros(k.*n-n,n)];
J=T1*J*T2';
J1=k*J;
X=idct2(J);
figure,imshow(log(abs(J-J1)),[]),colormap(jet(64));
%figure,imshow(log(abs(J1)),[]),colormap(jet(64));
figure;
imshow(double(X)/255);
[M,N]=size(X);
4.3频域分块重建的方法
该算法在对整块图像进行处理时,尽管采用了增强系数对图像亮度效果进行补充,但对整幅图像高频部分预测采用填零方式,在图像像素位数增大即图像信息量增大时这种预测精度不如对图像分块处理后高,且基于JPEG格式图像多采用分成8×8子块分块压缩编码,对上述算法进行改进。改进后的算法,将原始图像数据切割成接近8×8大小子块,对每一子块分别实施DCT放大算法。将图像分解为若干子图像,分别进行DCT变换,大大减小了DCT的计算量,提高了算法处理的速度。其实现效果如图4-6所示。
(2)对数据在频域上进行处理,得到放大后的频域。若需将图像放大k×k倍,则放大后的图像大小为M×N,M=[km],N=[kn]([]表示取整运算)。
(3)DCT反变换,将频域处理的数据恢复为图像空间域原始格式。其流程图如图4-4所示。
图4-4DCT放大图像流程图
用DCT处理图像后的效果图如图4-5所示。