專欄文章目錄
一、 Matlab影像處理入門文章目錄
- 專欄文章目錄
- 今日任務:
- 一、千呼萬喚始出來——主角介紹
- 1、初識數字圖形處理
- 2、初識MATLAB
- 二、言歸正傳——快速進入任務
- 1.軟體安裝
- 2.開始coding
- a.插播一個小技巧
- 三、總結(劃重點)
今日任務:
- 呼叫imread讀入一張圖片;觀察workspace中,記憶體變數的dimension和資料型別;
- 呼叫imshow直接顯示影像(同時顯示R通道、B通道和G通道);
- 對影像的三個通道進行簡單平均,得到單通道,并進行顯示,
3.1 方法1,逐像素完成,使用兩層for回圈;
3.2 方法2,直接利用矩陣運算完成;
3.3 測驗兩種方法的時間,將代碼至于tic和toc之間即可1,
一、千呼萬喚始出來——主角介紹
1、初識數字圖形處理
??顧名思義,所謂“數字影像處理”就是對數字影像的相關操作,(權威說法:數字影像處理是指借助于數字計算機來處理數字影像2),影像是通過視覺傳感器把我們的三維世界映射到二維空間的一種載體( p s : ps: ps:映射的程序大量資訊會被丟失,所以基于影像輸入的三維重建是病態的,相關問題后期我們慢慢討論),一幅影像可被定義為一個二維函式 f ( x , y ) f(x,y) f(x,y),其中的 x x x和 y y y是空間坐標,一對 ( x , y ) (x,y) (x,y)上面對應的幅值 f f f叫做影像在這一點的強度或灰度,當 x x x、 y y y和 f f f是有限的離散數值的時候,就稱這幅影像為數字影像,
2、初識MATLAB
??MATLAB:美國人開發的一個十分牛逼的數學軟體,主要功能有畫圖、圖形處理、信號分析、無線通信……應用領域十分廣泛,除此之外MATLAB內部函式都是科研和工程計算中的最新研究成果,而且經過了各種優化和容錯處理,所以十分高效(如果你寫出了效率更高的代替函式,那請收下我的膝蓋,絕對是大牛!!!),而且在其中很多領域的應用都被做成了工具包,可視化成都極高,極大減少了科研周期,且其使用的語言簡單易于快速上手,總而言之,是你學習、科研的一大利器!
二、言歸正傳——快速進入任務
1.軟體安裝
??由于是付費軟體,所以基本正規安裝渠道就是安裝學校或者公司的官方正版軟體(按需安裝各種工具包,隨用隨安裝),此處不再贅述,
2.開始coding
??首先,我們使用imread()函式讀入目標圖片,并使用imshow()函式顯示目標圖片,
% 讀取原圖并顯示
Im = imread('1.jpg'); %讀入圖片(三通道RGB影像)
%subplot(4,4,1); %此處是為了后面顯示方便,在一個頁面中顯示$4*4$張圖
imshow(Im);
title('原圖');
看一波效果:
??至此,我們完成了任務1的一半:呼叫imread讀入一張圖片 以及任務2: 呼叫imshow直接顯示影像,
a.插播一個小技巧
??MATLAB之所以廣受大家喜愛,主要還在與其友好的讓使用者自學的功能設定,看別人代碼函式不知道怎么辦?不要著急,默默選中該函式,就像下圖一樣選中
"
i
m
r
e
a
d
"
"imread"
"imread",然后敲擊鍵盤
F
1
F1
F1,查看幫助檔案,快速掌握函式用法并且能夠查看相關示例,所以MATLAB入門怎么辦?看幫助檔案!看幫助檔案!!看幫助檔案!!!

相同的辦法,我們再查看
"
i
m
s
h
o
w
"
"imshow"
"imshow"的幫助:

??接著我們進行下一步操作:觀察workspace中,記憶體變數的dimension和資料型別,
??
w
o
r
k
s
p
a
c
e
workspace
workspace在這里,目標影像
A
A
A因為是彩色影像,具有
R
R
R、
G
G
G、
B
B
B三個通道,所以資料大小是“
373
?
346
?
3
373*346*3
373?346?3”的三維矩陣,資料型別是可顯示的“
u
i
n
t
8
uint8
uint8”型別,

??點擊
A
A
A之后就可以看到矩陣
A
A
A中的每個具體值,

??然后,我們繼續完成任務三:對影像的三個通道進行簡單平均,得到單通道,并進行顯示,共使用兩種方法,
方法1:直接利用矩陣運算完成:
%方法1:mean函式求平均
tic
%R通道
R2 = A(:,:,1);
av = mean(R2,'all'); %此處是將二維陣列轉換成了一維陣列,隨后求平均
%fprintf('%f\n',av);
[r,c] = size(R2); %size分別獲取矩陣的行、列數
for i = 1:r
for j = 1:c
R2(i,j) = av;
end
end
subplot(4,4,10);
imshow(R2);
title('矩陣平均—R通道');
%G通道
G2 = A(:,:,2);
av = mean(G2,'all'); %此處是將二維陣列轉換成了一維陣列,隨后求平均
[r,c] = size(G2); %size分別獲取矩陣的行、列數
for i = 1:r
for j = 1:c
G2(i,j) = av;
end
end
subplot(4,4,11);
imshow(G2);
title('矩陣平均—G通道');
%B通道
B2 = A(:,:,3);
av = mean(B2,'all'); %此處是將二維陣列轉換成了一維陣列,隨后求平均
[r,c] = size(B2); %size分別獲取矩陣的行、列數
for i = 1:r
for j = 1:c
B2(i,j) = av;
end
end
subplot(4,4,12);
imshow(B2);
title('矩陣平均—B通道');
toc
方法2:逐像素完成,使用兩層for回圈:
%方法二:逐像素完成三通道取平均
tic
R3 = double(A(:,:,1));
R4 = A(:,:,1);
a=0;
for i = 1:r
for j = 1:c
a = a+R3(i,j)/r/c;
end
end
%fprintf('%f\n',a);
for i = 1:r
for j = 1:c
R4(i,j) = a;
end
end
subplot(4,4,14);
imshow(R4);
title('像素平均—R通道');
a = 0;
G3 = double(A(:,:,2));
G4 = A(:,:,2);
[r,c] = size(G3);
for i = 1:r
for j = 1:c
a = a+G3(i,j)/(r*c);
end
end
%fprintf('%f\n',a);
for i = 1:r
for j = 1:c
G4(i,j) = a;
end
end
subplot(4,4,15);
imshow(G4);
title('像素平均—G通道');
a = 0;
B3 = double(A(:,:,3));
B4 = A(:,:,3);
[r,c] = size(B3);
for i = 1:r
for j = 1:c
a = a+B3(i,j)/(r*c);
end
end
%fprintf('%f\n',a);
for i = 1:r
for j = 1:c
B4(i,j) = a;
end
end
subplot(4,4,16);
imshow(B4);
title('像素平均—B通道');
toc
上運行結果圖:

??最后,按照任務要求,我們截取運行時間對比:
??至此,今日任務完成!
三、總結(劃重點)
1、采用直接提取影像通道的方法,提取出的只是單通道分量,顯示的影像為灰度影像:采用將所需通道保留,其余兩通道置
0
0
0的方式則可得到三通道影像,此時影像為彩色影像;
2、直接讀取的單通道(
e
g
:
R
=
A
(
:
,
:
,
1
)
eg:R = A(:,:,1)
eg:R=A(:,:,1))資料型別為
u
i
n
t
8
uint8
uint8,在進行累加時最大不能超過
255
255
255,所以使用遍歷矩陣求平均時應當轉換成
d
o
u
b
l
e
double
double型別進行計算,但是在進行顯示的時候會出問題,所以應當對uint8型別的矩陣進行平均值賦值,
答:因為內置函式已經進行了相關容錯處理,
鏈接: 完整原始碼
I m a g e a n d V i d e o P r o c e s s i n g Image andVideo Processing ImageandVideoProcessing, Li Sun, School of Communication
& Electronic Engineering, East China Normal University, ??岡薩雷斯,數字影像處理(第三版), ??
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293835.html
標籤:其他
下一篇:機器學習訓練集、測驗集、預測集資料扁平化(包括相對、絕對目錄;os、pandas、opencv庫的部分函式使用)
