首页 > 代码库 > 图像线性点运算---MATLAB

图像线性点运算---MATLAB

最近学习了用MATLAB来对图像进行简单的线性运算。

首先就是最贱的的关于图像的相加相减,个人认为两张图片的合成真的是P图神技能啊!

 

两张图片的加法运算

clc;close all;clear all;
A=imread(‘couple.bmp‘);
B=imread(‘lena.bmp‘);
for i=1:1:256
for j=1:1:256
C(i,j)=A(i,j)+B(i,j);
end
end
subplot(2,2,1);imshow(A);title(‘comple.bmp‘);
subplot(2,2,2);imshow(B);title(‘lena.bmp‘);
imwrite(C,‘change.bmp‘);
subplot(2,2,3);imshow(C);title(‘相加后‘);

 技术分享

 

两张图片的减法运算:

clc;close all;clear all;
A=imread(‘change.bmp‘);
B=imread(‘lena.bmp‘);
for i=1:1:256
    for j=1:1:256
        C(i,j)=A(i,j)-B(i,j);
    end
end
imshow(C);

 

不管是图像的加法运算还是图像的减法运算都要注意两张图片的大小要保持一致,不然程序可能报错,或者像我这样为了将就小图片,较小的图像只与较大图像的一部分合成了

 

除此之外,还可以利用图像的加法运算去除图像的叠加性随机噪声

去除叠加性随机噪声的第一步当然是先生成若干张带噪声的图啦,我们老师的要求是要利用randn()函数为图像添加高斯白噪声,

于是我就只能百度一下rendn()是个啥了

百度百科上说randn的功能是产生标准正态分布的随机数或矩阵的函数,不过我觉得我不是太能体会这句话的意思,悟性太低了QAQ。。。

不过我的习惯就是多试试,或许试着试着就懂了呢

 

下面是我的代码

clc;close all;clear all;
A=imread(‘lena.bmp‘);
A1=im2double(A);
 for i=1:1:100 %产生100张带随机噪声的图像
        C(:,:,i)=0.1*randn(512);  %获得随机噪声
        B(:,:,i)=C(:,:,i)+A1; %将噪声混入原图像
 end
 K=B(:,:,1);
for i=2:100
     K=K+B(:,:,i);    %将获得的100张带噪图像相加
 end
 KK=K/100;  %均值图像
 subplot(2,2,1);imshow(A);title(‘原图‘);
 subplot(2,2,2);imshow(B(:,:,1));title(‘带噪声图之一‘);
 subplot(2,2,3);imshow(KK);title(‘去噪后‘);

 运行结果

技术分享

在编写这个程序的过程中,我遇到的最大障碍就是没有深刻理解用加法运算去噪声的原理,以至于我自己在哪里纠结了半天,最终在彻底明白是怎么一回事后才完成了代码,

总之,我觉得这是对我上课不认真听讲的乘法,不开心= =

 

关于用加法运算去除叠加性随机噪声的原理(随便找的。。)

技术分享

 

图像线性点运算---MATLAB