MATLAB教程系列 台大 09 exercise

2021-08-25 02:42:01 字數 3591 閱讀 8653

1. 不通過im2bw()函式完成影象二值化

通過graythreshold()函式,程式可以自動找到乙個對於當前來說更加合適的閾值來進行二值化。通過im2bw()影象,可以完成二值化,把當前影象變為只有黑白兩色的。例程如下:

i = imread('rice.png'); level=graythresh(i);

bw=im2bw(i, level); subplot(1,2,1); imshow(i);

subplot (1,2,2); imshow(bw);

結果:

如果不借助matlab中的函式,自己如何完成呢?

程式:

i = imread('rice.png'); 

thershold = 140;

for i=1:size(i,1)

for j= 1:size(i,2)

if i(i,j) > thershold

j(i,j) = 1;

else

j(i,j) = 0;

endend

endsubplot(1,2,1); imshow(i);

subplot(1,2,2); imshow(j);

結果:

可以看到兩種結果相差不大。但這張的下半部分背景色整體較深,導致一些「公尺粒」消失,可以通過「background estimation」的方法來得到背景,使得剩下的光線強度比較均勻,再通過「background subtraction」將背景分離,最後重新確定閾值並進行二值化。

程式:(在剛剛的基礎上繼續寫~)

i = imread('rice.png'); 

thershold = 140;

for i=1:size(i,1)

for j= 1:size(i,2)

if i(i,j) > thershold

j(i,j) = 1;

else

j(i,j) = 0;

endend

endsubplot(1,3,1); imshow(i);

subplot(1,3,2); imshow(j);

bg = imopen(i, strel('disk', 15)); %background estimation

i2 = imsubtract(i,bg); %background subtraction

level = graythresh(i2);

bw = im2bw(i2,level);

subplot(1,3,3); imshow(bw);

結果:

可以看到,經過處理後,原中的「公尺粒」和背景可以得到較好的分離。

**:

i=imread('rice.png');

bg=imopen(i, strel('disk', 15));

i2=imsubtract(i, bg); level=graythresh(i2);

bw=im2bw(i2, level);

[labeled, numobjects]=bwlabel(bw, 8);

flag=0;

num=;

for k=1:numobjects

for i= 1:size(labeled,1)

for j=1:size(labeled,2)

if labeled(i,j) == k;

flag=flag+1;

endend

endnum(end+1)=flag;

flag=0;

endmax(num);

int16(mean(num));

histogram(num); %下乙個練習中要求將size的histogram畫出

結果:

這兩個結果分別對應著max和mean的值。

其中,

i=imread('rice.png');

bg=imopen(i, strel('disk', 15));

i2=imsubtract(i, bg); level=graythresh(i2);

bw=im2bw(i2, level);

[labeled, numobjects]=bwlabel(bw, 8);

這部分**為老師給出的例程,通過這個程式可以得到乙個label matrix和numobjects, 直觀理解的話,分別為標註出的「公尺粒」和數出的公尺粒總數。從workspace中可以得到這個label matrix以及很直觀的公尺粒總數。

2. 將所有的公尺粒標為紅色

由於二值圖為單通道影象,而rgb三種顏色如果想要被呈現,必須是在影象為三通道的情況下才能實現。因此這一步,在剛才的基礎上,繼續對原圖進行一些處理。

**:

i=imread('rice.png');

bg=imopen(i, strel('disk', 15));

i2=imsubtract(i, bg); level=graythresh(i2);

bw=im2bw(i2, level);

[labeled, numobjects]=bwlabel(bw, 8);

flag=0;

num=;

for k=1:numobjects

for i= 1:size(labeled,1)

for j=1:size(labeled,2)

if labeled(i,j) == k

flag=flag+1;

endend

endnum(end+1)=flag;

flag=0;

endsubplot(1,2,1); imshow(labeled);

for i= 1:size(labeled,1)

for j=1:size(labeled,2)

if labeled(i,j) ~= 0

i(i,j,1)=255;

i(i,j,2)=0;

i(i,j,3)=0; %設定有公尺粒的地方為紅色,由於只顯示紅色,

%故只有第乙個通道值為255,其他均為0

else

i(i,j,1)=0;

i(i,j,2)=0;

i(i,j,3)=0; %背景色為黑色,三個通道均為0

endend

endsubplot(1,2,2); imshow(i);

結果:

MATLAB教程系列 台大 03 exercise

第三課中的練習,溫度轉換。要求,除非輸入的不是數字,程式停止,否則一直提示輸入溫度。function y ftoc f tips1 temperature in f is f input tips1 while isnumeric f 1 isempty f 0 isempty str2num f ...

Matlab系列教程 數值計算 求方差和標準差

首先,什麼是方差和標準差?方差,是在概率論和統計方差衡量隨機變數或一組資料時離散程度的度量,統計中的方差 樣本方差 是每個樣本值與全體樣本值的平均數之差的平方值的平均數。在許多實際問題中,研究方差即偏離程度有著重要意義。標準差,中文環境中又常稱均方差,是離均差平方的算術平均數的平方根。標準差是方差的...

Matlab系列教程之數值計算求方差和標準差

首先,什麼是方差和標準差?方差,是在概率論和統計方差衡量隨機變數或一組資料時離散程度的度量,統計中的方差 樣本方差 是每個樣本值與全體樣本值的平均數之差的平方值的平均數。在許多實際問題中,研究方差即偏離程度有著重要意義。標準差,中文環境中又常稱均方差,是離均差平方的算術平均數的平方根。標準差是方差的...