最近學習了用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('去噪后');
運行結果
在編寫這個程序的過程中,我遇到的最大障礙就是沒有深刻理解用加法運算去噪聲的原理,以至於我自己在哪里糾結了半天,最終在徹底明白是怎么一回事后才完成了代碼,
總之,我覺得這是對我上課不認真聽講的乘法,不開心= =
關於用加法運算去除疊加性隨機噪聲的原理(隨便找的。。)