12/22/2006

林翊展:廢水處理生化需氧量曲線

廢水處理工程裡,生化需氧量(BOD)是一項重要的參數,可以了解該廢水對於環境影響的程度.在BOD試驗當中,BOD值與反應時間為一條對數曲線,y=x*(1-exp(-k*t)),y為BOD值,x為終極BOD值,k為反應常數,t為時間.



u=input('請輸入終極BOD值 : ');
d=input('請輸入五天BOD值 : ');
k=-1/5*log(1-d/u);
t=0:30;
y=u*(1-exp(-k*t));
plot(t,y);
xlabel('reaction time (day)');
ylabel('BOD value (ppm)');
grid on;



程式會先要求輸入五天BOD值及終極BOD值,便可以畫出反應時間與BOD的曲線圖.
下圖為終極BOD=150,五天BOD=123的曲線圖

林書如: 人體受外力牽拉後引發之姿勢反應_肌肉活化情形_rev.1

延續上禮拜的程式內容,更新了onset時間輸入方式,並且在新程式中加入"可同時計算多位受試者以及多個測試的IEMG結果"的功能。

膚色切割器


膚色分割通常是做人臉辦識最重要的一件事,

要是沒先把膚色給分類出來並加以定位人臉的的位置, 
則會影響接下來的辨識結果.


切割膚色有很多的分法,這個切割器我是使用ycbcr的方法來做為偵察.
為什麼使用ycbcr呢:

因為RGB的色彩空間很容易受到光源的影響而有明顯的變化,

而使在設定顏色的分割值,會有很大的大的誤差.
又因為ycbcr有良好的亮度和色度分離的特特(彩度)所以我就使用它.

在此Y 代表亮度,Cb和CR都代表色度(彩度) 轉換公式如下

但在matlab你不用建立上式,只要打rgb2ycbcr('檔案')轉換就可以了


%----程式碼-----

clear all
close all
clc
a=imread('nomo.jpg'); % 輸入影像

b=rgb2ycbcr(a); % 轉換成ycbcr
cb=b(:,:,2);
cr=b(:,:,3);

cb(cb<=125)=255; % cb的判斷式,是膚色為白色
cb(cb~=255)=0;
figure(1);imshow(cb)

cr(cr>=137)=255; % cr的判斷式,是膚色為白色
cr(cr~=255)=0;
figure(2);imshow(cr)

rr=and(cr,cb); % 找出二者都是白的
rt(:,:,1)=double(rr).*double(a(:,:,1));
rt(:,:,2)=double(rr).*double(a(:,:,2));
rt(:,:,3)=double(rr).*double(a(:,:,3));
figure(3);imshow(uint8(rt))


%--------------結果----------
原影像圖,如下

分割後的cb影像,如下

分割後的cr影像,如下

只秀出膚色圖


以上就是建立膚色切割器的基礎公式
由上方的圖可知,這些影像還一些小雜點,在這我用形態學中的Opening operation來消除雜點
雜訊去除

形態學
Opening(斷開)運算:
opening運算是先被侵蝕後再膨脹,通常是用來平滑影像輪廓,截斷窄的細頸,消除細的突支,
其原理如下:
(一)膨脹:將物體的邊界往外膨脹若干像素的方法。 如下圖:

(二)侵蝕:與膨脹相反的動作,這是一種從物體的邊界上,將物體往內收縮若干像素。
如下圖:

斷開圖如下

標記法:
兩像素間關係有下述兩種性質:
(一)像素的近鄰(neighbors):
在座標(x,y)處的像素P有水平和垂直方向的近鄰,其座標為
(x-1,y),(x+1,y),(x,y+1),(x,y-1),
這樣一組像素稱P點的4-近鄰(4-nieghbors)。

P的四個對角近鄰的座標為(x-1,y+1),(x+1,y+1),(x-1,y-1),(x+1,y-1),
這些點與4-近鄰在一起,稱為P的8-近鄰(8-neighbors)。

(二)連通性(Connectivity):
像素間的連通性是用於確定影像中物體邊界和區域組成成分的重要概念。
要判斷兩個像素是否連通,必須要確定它們是否在某種意義中相鄰(如它們是否為4-近鄰),
並且它們的灰度值是否滿足特定的相似準則,(如灰度值是否相同)。
在此我們用V來定義連通性的灰階集合,並介紹二種類型的連通:
(a)4-連通:
若某一像素Q 位於4-近鄰( P)中,且Q和P的像素值位於所定的灰度值(V)中,則稱4-連通。
(b)8-連通:
若某一像素Q位於8-近鄰( P)中,且Q和P的像素值位於所定的灰度值(V)中,則稱8-連通。

(三)標記法原理:
標記法是使用在二值化影像,白色為255,黑色為0,p表掃描過程中之像素值;
先由左而右,再由上而下掃描影像,在此只考慮4-連通分量。
當掃描到為0的時則移動到下一掃描位置,當掃描到p為255的,並根據其連通性檢查p點的左方和上方,
如果它們均為0的為話,給p一個新的標記值,如果這二個近鄰中只有一個為255,
則把它的標記給予p,如果它們都是255且標記相同,則把這個標記給予p。
如果它們都是255但標記不同,則把其中一個標記給予p,並標明這兩個標記是等價的。
掃描結束後所有值為255的點都被標記過了,但有些標記是可能是等價的,
所以再對影像作第二次掃描,將所有被記錄為等價的標記值改成相同的標記。

新增加的程式碼

se=strel('disk',2);%用open過濾膚色圖像
bw= imopen(rr,se);
figure(4);imshow(bw)

%用open過濾後的圖,再用標記法來找出最大區塊
l=bwlabel(bw,8); % 標記法

stats=regionprops(l,'Area'); % 找出相同的並統計
allArea=[stats.Area];
tt=max(allArea); % 找出最大的區塊
idx=find(allArea==tt);
bw2=ismember(l,idx);
figure(5);imshow(bw2)%過濾後的人臉圖像
%----------------------------------------------------
GUIDE
首先把一張rgb的照片轉成ycbcr(y代表亮度,cb代表色度(blueness),cr也代表色度(redness))
然後我們可以使用slider來調整y cb cr的範圍,使它只出現膚色的範圍
即可達到膚色分割了

膚色切割器檔案下載

肌電訊號(EMG)之頻域分析


肌電訊號分析可以分為兩個主要部份,一個即是時域
(time domain)另一則是頻域(frequency domain)。

這裡介紹物理治療會使用去計算頻率變化的方法,利
用傅立葉轉換的方式求得頻率和其強度的關係圖。

按我連結