matla圖像處理基本操作

今天主要總結一下matlab圖形,圖像方面的的基礎知識。

首先對比一下matlab和OpenCV:

matlab的矩陣運算很快,實現的算法可以迅速的仿真,這樣方便算法的確定,但是工程較大時,用起來不太方便,不易管理,另外他是商業軟件,不是免費的。

OpenCV,這幾年發展速度非常快,已經到OpenCV3版本了,圖像的基本算法都實現,比起matlab而言,需要有C/C++基礎,適合於大型工程,而且是開源免費。使用起來比matlab稍微複雜。

共同點:兩者的算法基礎基本相同,算法互通

1.matlab圖形對象

matlab的圖像對象思想是面向對象,即一個圖像就是一個圖形對象,可以設置各種屬性,圖形對象的從屬關係如下:


其中,root對象是根對象,只能有一個。其他的對象都從屬於根對象。

1.1figure對象的格式有兩種,第一種: 窗口句柄 = figure('屬性1',屬性值1,,’屬性2‘,屬性值2,...),或者figure(窗口句柄),例子如下:

h = figure('color',[1 1 1],'position',[100 100 300 300]);
figure(h);%如果句柄h不存在,則用h初始化一個默認的窗口。
上面的提到的’屬性‘有很多,這裏不一一舉例了,需要的時候再查閱。

注意:如果沒有在plot或者imshow時,沒有figure對象,則系統默認創建一個figure,如果有多個figure,則總有一個是’當前figure對象‘.

1.2 uicontrol對象

就是控制框對象(GUI),比如按鈕,文本框,這個和MFC,QT的界面類似,這一不細說了。下面舉一個例子,看了就明白:

figure(h);%如果句柄h不存在,則用h初始化一個默認的窗口。
%uicontrol控制對象,格式:控制窗句柄 = uicontrol(父對象句柄,‘屬性1’,屬性值1,‘屬性2’,...)
radio = uicontrol(h,'style','radio','position',[2 2 30 30]);
uicontrol(h,'style','slide','position',[50.2,50.2,100.0,100.0]);%matlab默認座標爲左下角
1.3 uimenu對象

也就是菜單欄,格式和uiconstrol類似,屬性名稱需要使用的時候再查。
1.4 axes對象

即座標軸對象,他定義一個區域,所有的子對象都限制在這個區域,座標軸對象是figure的子對象,同時也是image圖像、light對象、line對象的父對象。同figure一樣,如果沒有指定axes對象,則默認創建一個,如果有多個,則總有一個是’當前‘座標軸。可以有set()函數來設定各種屬性。

1.5句柄對象那個的訪問,設置等

set,get,findobj,delete(),copyobj()等,set()的格式:

set(對象句柄,‘屬性1’,屬性值1,‘屬性2’,...)

2 matlab圖形繪製

基本函數:常用的函數有plot(x1,y1),plot3(c1,y1,z1),對數座標繪製,半對數座標繪製,等

條形圖繪製:bar(x,y)繪製二維條形圖,bar3()三維條形圖,還可以水平繪製

柱狀圖的繪製:hist()函數等,

餅圖的繪製:pie()函數

離散圖形的繪製:stem()函數

方向和矢量圖繪製:compass(),feather(),quiver()等

輪廓圖的繪製:contour()繪製

動畫的繪製:getframe()函數

以上的函數都是matlab函數的一部分,matlab能完成很多的繪圖。感嘆!!!


3.matlab中的圖像

這一部分是和我專業最相關的部分,以前經常用OpenCV做計算及視覺的開發,在openCV2.0以後,有了C++的函數接口,這些OpenCV的函數接口越來越像matlab的風格

,比如cv::imread(),就和matlab的imread類似,其他的也類似,這樣,matlab的做一下基本的瞭解就可以了,因爲原理是一樣的,只是函數的名字和使用方法有一點不同。下面的基本知識儘量和OpenCV對比着介紹:

圖像的讀取,保存,顯示:

x = imread('1.png');
x(3,3,:)%像素(3,3)的顏色訪問:‘:’表示所有通道的顏色。
y = rgb2gray(x);%還有其他索引圖等之間的轉化,以及顏色空間的轉化
%imshow(y);imwrite(y,'2.jpg');
%imshow 2.jpg
info = imfinfo('1.png');%文件本身的信息

圖像的多幀陣列,例子如下:

x = imread('1.png');
y = imread('2.png');
z = imread('3.png');
a = cat(2,x,y,z);
%imshow(a(:,:,1))%顯示第一幀
montage(a);%多幀顯示,結果是圖像水平排列在一起

動畫:講圖像表示爲索引關係,然後圖像數據疊加,循環顯示圖像陣列,相關聯的函數爲:immovie().
紋理映射,例子如下:

I = imread('1.png');
[x,y,z] = sphere;%定義球
warp(x,y,z,I);%圖像映射到球上,用的是雙線性漸變算法
拓展:可以用於其他的紋理映射。

matlab可以在一個窗口顯示多幅圖像,設計的函數爲subimage();

4.圖像的幾何操作和區域處理

插值:和OpenCV一樣,有三種插值方法。主要用在圖像的縮放和變換的相關函數。

圖像縮放函數:imresize(),函數中要指定插值方法。

圖像的旋轉:imrotate()。

圖像的剪切:imcrop(),OpenCV中是控制ROI區域來實現的。

圖像區域的處理:可以選取任意形狀的區域,用mask來標識,和openCV一樣,但是OpenCV需要自己編寫來實現mask,matlab直接用函數就可以形成。

多邊形選擇區域:roipoly(),OpenCV中沒有這個功能。灰度選擇區域等,濾波等,matlab直接就能得到區域的mask,確實很方便啊。

5.圖像變換

算法和OpenCV一樣,主要是頻域的傅里葉變換,此處略

radon變換:類似於OpenCV中的Hough變換,可以檢測圖像中的直線等。原理:圖像投影到某一個方向上的積分和。函數爲randow(image,theta);theta爲旋轉角度;

6.圖像增強,腐蝕膨脹

原理和OpenCV一樣,此處略

7.四叉樹分解和圖像分割(OpenCV沒有)

主要用於圖像分割:截圖如下:


8.不均勻亮度的矯正

首先對背景亮度粗略估計(32x32的塊),然後統計原始圖像,與北京亮度做差,然後在調整原始圖像的灰度級。主要函數爲blkproc()


到此,matlab圖像處理就不在介紹了,本文寫的很簡陋,可以當做自己的筆記吧,大家不要吐槽。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章