图片叠加。
将一幅礼花图片和一幅夜景图片做叠加运算,使达到烟花夜景的美图效果。
3.1、设计思路
利用matlab强大的图像处理功能,通过编写程序,实现对两幅图片的像素进行线性运算,利用灰度变换的算法使图片达到预期的效果。
3.2、软件介绍
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户直接进行下载就可以用。
3.3、常见简单程序语句及算法分析
3.4、图片叠加及灰度变换分析
程序1
[m,n,l]=size(C);
for i=1:m
for j=1:n
for k=1:l
D(i,j,k)=C(i,j,k)+ B(i,j,k);
end
end
end
此程序的主要功能是对两幅图片通过算法来实现叠加的效果,程序中的几个变量都是像素点的值,通过三个循环使得两幅图片对应的值线性相加,最大值应该是以255输出,超过255也是以255输出。
程序2
J = imadjust(I,[low_in high_in], [low_out high_out])
此程序变换的原理是:如果原图像f(x, y)的灰度范围是[m, M],我们希望对图像的灰度范围进行线性调整,调整后的图像g(x, y)的灰度范围是[n, N],那么下述变换:g(x,y)Nnf(x,y)mn就可以实现这一要求。MATLAB图像处理工具箱中提供的imadjust函数,可以实现上述的线性变换对比度调整。
四、设计步骤
(1)处理之前,我们先来看看两幅原图,一幅是带有礼花的图片,另一幅是一幅东方明珠的夜景图。
图 1
图 2
通过图片我们发现,礼花的图片非常的亮,而夜景图则显得有些灰暗。我们推测,如果让礼花和夜景的图片叠加到一起,会不会由于礼花的亮度太大而掩盖了城市的夜光,达不到我们想要的效果。
(2)打开matlab图像处理软件,7.0及以上版本就可以,打开之后,显示界面如下(我的版本是2012b)。
图3
图4
(4)在打开的界面之中输入程序。图片的位置是你所要用的图片的准确位置,尽量写详细点,减少计算机的读取时间,加快读取速度。如图所示。
图5
(5)点击运行按钮,即界面上的绿色按钮。
图6
(6)查看效果,如下图。
图7
通过处理后的图片,我们看到由于礼花太亮,完全将城市的夜景掩盖住了,效果不是太理想。我们设想加入灰度变换函数,将礼花的图片变的暗一点,将夜景的亮度提高一点,看看效果怎么样,加入灰度变换程序,如下图。
图8
(7)软件调试后运行程序,如下图。
图9
结果显示加入灰度变换的函数之后,图片效果较之前好多了,达到了预期的目的。
五、软件代码
通过matlab进行图像处理,代码如下:
clear;
clc;
A=imread('C:\Users\Administrator\Desktop\作业\礼花.jpg');
C=imresize(A,[300,400]);
B=imread('C:\Users\Administrator\Desktop\作业\夜景提亮天空中加入礼花.jpg');
[m,n,l]=size(C);
for i=1:m
for j=1:n
for k=1:l
D(i,j,k)=C(i,j,k)+ B(i,j,k);
end
end
end
figure
imshow(D);
imwrite('C:\Users\Administrator\Desktop\作业\礼花效果图1.jpg')
调试之后的程序代码如下:
clear;
clc;
A=imread('C:\Users\Administrator\Desktop\作业\礼花.jpg');
B=imread('C:\Users\Administrator\Desktop\作业\夜景提亮天空中加入礼花.jpg');
A1=imadjust(A,[0,1],[0,0.9]);
B1=imadjust(B,[0.3,0.6],[0,1]);
C=imresize(A1,[300,400]);
[m,n,l]=size(C);
for i=1:m
for j=1:n
for k=1:l
D(i,j,k)=C(i,j,k)+ B1(i,j,k);
end
end
end
figure
imshow(D);
imwrite('C:\Users\Administrator\Desktop\作业\礼花效果图2.jpg')
处理后的图片如下:
图 10
六、结果分析
通过两幅图的对比,发现第二幅图片较第一幅,效果明显增强。是由于加入灰度变换函数,使原图的灰度值发生变化,以达到实际的效果。
效果对比图11