您現在的位置是:首頁 > 垂釣

Matlab 影象處理基礎

  • 由 Bug分享 發表于 垂釣
  • 2021-10-17
簡介傳入的x0,x,y0,y分別對應的是影象矩陣的行和列,利用 meshgrid 生成的網格面都與 turn_pic 的 size 正好相反

matlab中ind什麼意思

一、影象處理的基本操作

1。從圖形檔案讀取影象

pic = imread(‘C:\Users\Good\Pictures\m。jpg’);

透過matlab自帶的imread讀入影象,函式內為影象的路徑。如果圖片在當前資料夾下,可以透過圖片名直接匯入。

pic = imread(‘m。jpg’);

2。顯示影象

imshow(pic);

透過上面的簡單操作,我們已經可以在matlab中讀入影象檔案,並顯示出來。接下來我們要對影象本身的一些問題進行原理性的講述

二、關於影象

1。光的三基色

(1) 光的三基色,就是光的三種基礎顏色(

Red、Green、Blue

),不可以透過其他顏色混合得到。但我們卻可以透過將這三種顏色混合獲得自然界中絕大部分顏色。

(2) 在matlab中,顏色的表示就是透過顯示RGB相應的數值來表示顏色。通常情況下,RGB各有256級亮度,用數字表示為從0、1、2…直到255,共256級。每個基色分量直接決定顯示裝置的基色強度。

imfinfo(‘C:\Users\Good\Pictures\m。jpg’) %獲取圖形檔案的資訊size(pic)

Matlab 影象處理基礎

可以看出影象在matlab中就是一個 Height ✖ Width ✖ 3 的一個 uint8 型別的矩陣,其中 Height、Width 是影象的大小,也就是畫素點。一個個畫素點上其中3即為RGB的三個數值,用來表示該畫素點的顏色,透過畫素點的座標來定位到畫素點。

R = pic(:,:,1);G = pic(:,:,2);B = pic(:,:,3);

Matlab 影象處理基礎

2。灰度影象

灰度是描述灰度影象內容的最直接的視覺特徵。它指黑白影象中點的顏色深度,範圍一般從0到255,白色為255,黑色為0,故黑白影象也稱灰度影象。灰度影象矩陣元素的取值通常為[0,255],因此其資料型別一般為8位無符號整數,這就是人們通常所說的256級灰度。

Matlab 影象處理基礎

3。彩色影象轉化成灰度影象

rgb2gray

matlab的內建函式,用來將RGB影象或顏色圖轉換為灰度圖。灰度圖的影象矩陣是一個 Height ✖ Width ✖ 1 的一個 uint8 型別的矩陣。也就是將三基色RGB的數值轉化為一維的灰度值,便於影象處理。彩色影象轉換為灰度影象時,需要計算影象中每個畫素有效的亮度值,其計算公式為:

Y = 0.3R + 0.59G + 0.11B

Matlab 影象處理基礎

turn_pic = rgb2gray(pic);pic = double(pic); %需要轉化型別,不然計算結果可能不同turn_pic(1,1)0。3*pic(1,1,1) + 0。59*pic(1,1,2) + 0。11*pic(1,1,3)

Matlab 影象處理基礎

4。灰度影象轉化為彩色影象

將灰度影象轉換為彩色影象,稱為灰度影象的偽彩色處理。

偽彩色處理技術的實現方式有很多,如:灰度分割法、灰度級-彩色變換法、濾波法等等。以下采用的是灰度級-彩色變換法,這是將來自感測器的灰度影象送入三個不同特徵的R、G、B變換器,然後將三種變換器的不同輸出分別送到彩色顯示器進行顯示的技術。

gray2rgb

函式可以將灰度圖轉化為彩色圖,不過需要下載相關檔案,需要的話可以自行搜尋,而且執行效率很低。

對映關係如下,其中 R(x,y)、G(x,y)、B(x,y) 分別表示 R、G、B 的顏色值,f (x,y)表示特定點灰度影象的灰度值,f 是所選灰度影象的灰度值。

Matlab 影象處理基礎

Matlab 影象處理基礎

Matlab 影象處理基礎

5。 二進位制影象

二進位制影象也稱為二值影象,通常用一個二維陣列來描述,1位表示一個畫素,組成影象的畫素值非0即1,沒有中間值,通常0表示黑色,1表示白色。二進位制影象一般用來描述文字或者圖形,其優點是佔用空間少,缺點是當表示人物或風景影象時只能描述輪廓。一般我們可以透過設定閾值來進行二進位制影象轉化,matlab中可以利用

im2bw

從灰度、索引、RGB圖象建立二值圖。

6。索引影象

索引影象是一種把畫素值直接作為RGB調色盤下標的影象。在MATLAB中,索引影象包含一個數據矩陣X和一個顏色對映(調色盤)矩陣map。資料矩陣可以是8位無符號整型、16位無符號整型或雙精度型別的。可以透過以下程式碼對索引影象和RGB影象進行轉化:

IND = rgb2ind(pic,n); % pic為RGB影象矩陣,map為顏色對映矩陣,最多包含n個顏色。n必須小於或等於 65,536。RGB = ind2rgb(pic,map); % pic為索引影象矩陣,map為顏色對映矩陣

7。小結

Matlab 影象處理基礎

2英文two和to發音相同,所以很多轉換類函式都用2來命名而非to。比如 number to string, 不是命名為 numTostr 而是 num2str。記住英文縮寫,我們就可以靈活使用各種函式進行影象轉換。

三、利用插值法對影象進行放大處理

1。二維插值

二維插值是對兩個變數的函式

z = f(x,y)

進行插值

求解二維插值的基本思路是:

Matlab 影象處理基礎

常見的二維插值可以分為兩種:網格結點插值和散亂資料插值。

二維插值處理圖片,可以使放大後的圖片的失真率降低,提升圖片放大後的顯示效果。

2。插值問題的出錯總結

pic = imread(‘C:\Users\Good\Pictures\m。jpg’);turn_pic = rgb2gray(pic);[m,n] = size(turn_pic);x0 = 1:m;y0 = 1:n;x = 1:0。5:(m+0。5);y = 1:0。5:(n+0。5);z = interp2(x0,y0,turn_pic,x,y,‘cubic’);

錯誤提示:

Matlab 影象處理基礎

出錯原因:

x0, y0, X, Y 都是 double 型別的資料,但是 turn_pic 是 uint8 型別的資料。

錯誤修改:

turn_pic = double(turn_pic);

修改後執行

Matlab 影象處理基礎

錯誤分析:

像這樣的插值問題,最怕的就是矩陣的 size 不對應,參照我們插值時可以傳入 meshgrid 生成的網格資料,我們不難知道,interp2 的插值方式,內部會自己利用 meshgrid 方式處理傳入的資料。但我們知道 meshgrid 方式生成的網格陣列與原資料矩陣 size 相反,所以要注意這個 size 問題。以程式碼為例:

[m,n] = size(turn_pic);x0 = 1:m;y0 = 1:n;

傳入的x0,x,y0,y分別對應的是影象矩陣的行和列,利用 meshgrid 生成的網格面都與 turn_pic 的 size 正好相反。所以我們初始定義x,x0對應列,y,y0對應行,這樣就可以避免 size 錯誤。

正確程式碼:

pic = imread(‘C:\Users\Good\Pictures\m。jpg’);turn_pic = rgb2gray(pic);turn_pic = double(turn_pic);[m,n] = size(turn_pic);x0 = 1:n;y0 = 1:m;x = 1:0。5:(n+0。5);y = 1:0。5:(m+0。5);[X,Y] = meshgrid(x,y);z = interp2(x0,y0,turn_pic,X,Y,‘cubic’);z = uint8(z);imshow(z);

效果圖:

Matlab 影象處理基礎

3。網格點資料的生成

在matlab中,進行三維影象的繪製,一般要構造二維的網格面,再透過二維的網格面對應z值,繪製出三維的影象。

一般,我們常用meshgrid來構建二維的網格面。

meshgrid:

二維和三維網格

用法:

[X,Y]=meshgrid(x,y)

另一種用法

[X,Y]=meshgrid(x)

這等價於

[X,Y]=meshgrid(x,x)

其中x為n維向量,y為m維向量,x, y為 m ✖ n維的矩陣。它用於產生“二維變數的網格”。

下面舉例說明:

x = 1:4;y = 1:3;[X,Y] = meshgrid(x,y);

Matlab 影象處理基礎

Matlab 影象處理基礎

ndgrid:

N 維空間中的矩形網格

用法:

[X1,X2,...,Xn] = ndgrid(x1,x2,...,xn)

複製網格向量 x1,x2,。。。,xn 以生成 n 維滿網格。

[X1,X2,...,Xn] = ndgrid(xg)

指定對所有維度使用單一網格向量 xg。您指定的輸出引數的數目決定輸出的維度 n。

兩者的區別與聯絡:

ndgrid 支援從1維到n維,而 meshgrid 僅僅限制於2維和3維。在2維以及3維中,兩個函式的座標輸出是一樣的,[X,Y,Z] = meshgrid(x,y,z)等效於 [Y,X,Z] = ndgrid(y,x,z),不同的地方在於輸出陣列的形狀不一樣。例如:x長度為 m,y長度為 n,meshgrid生成的二維網格 size 為 n✖m,而ndgrid為 m✖n。

參考文章:

彩色影象與灰度影象之間的轉換

連結:

https://www。cnblogs。com/minisculestep/p/4878894。html

Top