1. 前言
MATLAB是Math Works公司于1982年推出的一套高性能的數值計算和可視化軟體,它集數值分析、矩陣運算、信号處理和圖形顯示于一體,構成了一個友善的,界面友好的使用者環境。MATLAB的推出得到了各個領域專家學者的廣泛關注,其強大的擴充功能為各個領域的應用提供了基礎。由各個領域的專家學者相繼推出了MATLAB工具箱,而且工具箱還在不斷的增加,這些工具箱給各個領域的研究和工程應用提供了有力的工具。借助于這些“巨人肩上的工具”,各個層次的研究人員可直覺、友善地進行分析、計算及設計工作。進而大大地節省了時間。
2. 本文所用到的MATLAB指令
imread(); image(); whos; for; randn(); double(); uint8(); cat(); dwt2();
關于上述的指令使用方法可以參考一些MATLAB方面的書籍或者用MATLAB自帶的幫助(help)指令.
如 我想知道dwt2()指令的使用方法 可以執行下面的指令
>> help dwt2
系統就會告訴你它的使用要求和方法,如果系統說找不到對應的幫助檔案,那就可能是你裝的MATLAB裡面沒有這個指令,那很可能這個指令就不能使用
. 本文所用到的圖像都是作者直接把圖像檔案放到Matlab的work子目錄裡面的。如果直接在Matlab上運作作者所寫的代碼,肯定不會通過。不過Matlab自己也帶有圖像,查閱一下相關的資料,就很容易明白怎麼去做。
3. 程式和實驗結果
⑴
>> [x,map]=imread('lena.bmp');
>> image(x);colormap(map);
>> whos x
Name Size Bytes Class
x 256x256 65536 uint8 array
Grand total is 65536 elements using 65536 bytes
圖1為運作結果
圖1
⑵.圖像的旋轉
① >> image(x');colormap(map); x’是x的轉置
② >> [x,map]=imread('lena.bmp');
>> for i=1:128
for j=1:256
t=x(i,j);
x(i,j)=x(256-i+1,j);
x(256-i+1,j)=t;
end
end
>> image(x);colormap(map);
①和②的運作結果,自己先想想應該是什麼一個結果,然後再到電腦上實作一下,看看是否與自己的想法一緻。
③>> [x,map]=imread('lena.bmp');
>> for i=1:128
for j=1:256
x(i,j)=x(256-i+1,j);
end
end
>> image(x);colormap(map);
運作結果如圖2
圖2
④ >> [x,map]=imread('lena.bmp');
>> b=randn(256);
>> x=double(x)*b;
>> image(x);colormap(map);
運作結果将是原圖像變成了一個模糊的一個圖像,和原圖像完全不一樣。
⑤ >> det(b)
ans = -5.3438e+252
>> image(x*inv(b));colormap(map);
我們将會看到,圖像又被還原成了原來的圖像。
.通過這幾個例子,可以看出利用矩陣的知識來處理圖像,是很友善的,當然矩陣有很多變換方式,有興趣的自己可以做一些變換,看看得到什麼效果.
⒋ MATLAB在小波中的應用
MATLAB工具箱中,有專門的小波處理圖像的函數指令,這對我們對圖像利用小波的知識進行相應的變換提供了友善,這裡我們隻是對灰階圖像和彩色圖像進行小波分解。限于篇幅,沒有把運作結果顯示在文章中。
- 灰階圖像的分解
① >> [x,map]=imread('lena.bmp'); >> [ca,ch,cv,cd]=dwt2(x,'db1');
>> image([ca,ch;cv,cd]);colormap(map);
② >>image([ca,4*ch;4*cv,4*cd]);colormap(map);
對後面的三個都乘以一個數,主要是為了能看清楚這三個分量。
⑵ 對彩色圖像的分解
彩色圖像在存儲在電腦上是以三位矩陣的方式存儲的,關于圖像的存儲方法自己可以查閱相關的資料.
MATLAB提供的小波分解函數一般隻對二維矩陣可以進行分解和重構;根據彩色圖像成像的原理,我們把彩色圖像的RGB三個分量先提出來,對三個分量進行分解,然後再加起來,就得到了彩色圖像的分解。MATLAB也提供了從三維矩陣提取二維矩陣的方法.
① >> [x,map]=imread('Barbara.bmp');
>> image(x);colormap(map);
② >> [x,map]=imread('Barbara.bmp');
>> image(x);colormap(map);
>> a=x(:,:,1);
>> b=x(:,:,2);
>> c=x(:,:,3);
>> [ca,ch,cv,cd]=dwt2(a,'db1');
>> [ca1,ch1,cv1,cd1]=dwt2(b,'db1');
>> [ca2,ch2,cv2,cd2]=dwt2(c,'db1');
>> B=uint8(cat(3,ca,ca1,ca2));
>> B1=uint8(cat(3,ch,ch1,ch2));
>> B2=uint8(cat(3,cv,cv1,cv2));
>> B3=uint8(cat(3,cd,cd1,cd2));
>> image([B,B1;B2,B3]);colormap(map);
三個分量看得不是很明顯;我們适當地擴大分量,來看一下效果
B1=uint8(cat(3,4*ch,4*ch1,4*ch2));
B2=uint8(cat(3,4*cv,4*cv1,4*cv2));
B3=uint8(cat(3,4*cd,4*cd1,4*cd2));
image([B,B1;B2,B3]);colormap(map);
實驗結果可以看出,其它三個被突出了。
為了說明a,b,c是原來彩色圖像的三個RGB分量,我們可以用a,b,c再組合成原來的彩色的圖像.
>> image(cat(3,a,b,c));colormap(map);
運作結果可以看出,和原來的彩色圖像是一樣的。
⒌ 結束語
本文隻是進行了一些簡單的圖像處理,Mtalab軟體本身還包含一些複雜的圖像處理指令,如邊緣檢測,圖像的增強等等,另外,對圖像進行了小波分解以後,還可以進行圖像的壓縮,還可以利用二進小波變換來求圖像的奇異點。總之,Mtalab作為一個強大的資料處理軟體,
為我們進行科學研究提供了極大的友善。