MATLAB size/length/numel 影象的灰度化,顯示與判斷
size:獲取陣列的行數和列數
length:陣列長度(即行數或列數中的較大值)
numel:元素總數。
s=size(A),當只有一個輸出引數時,返回一個行向量,該行向量的第一個元素時陣列的行數,第二個元素是陣列的列數。
[r,c]=size(A),當有兩個輸出引數時,size函式將陣列的行數返回到第一個輸出變數,將陣列的列數返回到第二個輸出變數。
如果在size函式的輸入引數中再新增一項,並用1或2為該項賦值,則size將返回陣列的行數或列數。 其中r=size(A,1)該語句返回的時陣列A的行數, c=size(A,2) 該語句返回的時陣列A的列數。
n=numel(A)該語句返回陣列中元素的總數。
n=length(A):如果A為非空陣列,返回行數和列數兩者之間數值較大的那一個值,即相當於執行了max(size(A));如果A為空陣列,則返回0;如果A是一個向量則返回A的長度。
n=max(size(A)):若A為非空陣列,返回A的最大維數;若A為空陣列,返回A中最長的非0維數。
彩色圖片為3維,灰度圖片為2維。
zhu和44為彩色圖片 12為灰度影象
vv=imread('D:\實驗圖片\zhu.jpg');pp=imread('D:\實驗圖片\12.jpg');
gg=imread('D:\實驗圖片\44.jpg');
[a, b, c]=size(vv); d=length(size(vv));
h=length(size(pp));
k=length(size(gg));
tt=size(pp);
[l, m, n]=size(gg) ;
[ll, mm, nn]=size(pp)
numel(size(vv))
numel(size(pp))
numel(size(gg)) 執行結果為:
a =800
b = 600
c = 3
d = 3
h =2
k =3
tt = 1280 1024
l = 640
m = 670
n = 3
ll = 1280
mm =1024
nn = 1
ans = 3
ans = 2
ans = 3
通過imread(‘ ’)讀取圖片,讀入的影象為unit8型,而MATLAB中矩陣運算中要求所有的運算變數為double型(雙精度型)。通常使用im2double函式將影象資料轉換成雙精度型資料。
同時比較double、im2double、mat2gray區別
****************假設某影象資料A(uint8格式)**********************
A =
235 200 89 20
>>double(A) %返回與原矩陣數值相同但型別為double的矩陣;
ans =
235 200 89 20
>>im2double(A)
%返回矩陣型別:double;數值範圍[0 1] ,0對應uint8中的0;1對應uint8中的255;
ans =
0.9216 0.7843 0.3490 0.0784
>>mat2gray(A) %對原矩陣歸一化
ans =
1.0000 0.8372 0.3209 0
****************假設矩陣A為一般二維陣列,非影象資料(double格式)**********************
A =
235 200 89 20
>> double(A)
ans =
235 200 89 20
>> im2double(A)
ans =
235 200 89 20
>> mat2gray(A)
ans =
1.0000 0.8372 0.3209 0
**********************小結***************************
im2double:如果輸入型別是uint8、unit16 、logical,則按照0-->>0,255-->>1,將其值按比例處理成0~1之間的double數值;如果輸入型別是double,輸出沒有處理;
double:返回數值與輸入相同的double型別矩陣;
mat2gray:對輸入進行歸一化處理,最小值-->>0;最大值-->>1,輸出型別為double。
注意:double( img)就是簡單的資料型別轉換,將無符號整型轉換為雙精度浮點型double,但是資料大小沒有變化,原本資料是0~255之間,轉化後還是0~255。例如原來是255,那麼轉換後為255.0,小數位0個數是由double資料長度決定,實際資料大小還是255,只不過這個255已經是double型別空間儲存了,再增加不會發生溢位情況。而im2double(img)則不僅僅是將uint8轉換到double型別,而且把資料大小從0~255對映到0~1區間。
img = imread('./1.jpg'); % 讀入是unit8型(0~255)資料
I1 = im2double(img); % 把影象轉換成double精度型別(0~1)
I2 = double(img)/255; %uint8轉換成double,作用同im2double
各資料型別的轉換參考: http://blog.csdn.net/fx677588/article/details/53301740 此篇中,還有影象顯示imshow()的說明
判斷圖片是否為灰度圖:
% check to see if the image is a color image...d = length(size(im));
if d==3
image=double(rgb2gray(im));
elseif d==2
image=double(im);
end 或者 numel(size(im))>2 為彩色影象 numel(size(im))=2 為灰度影象