前情回顧:Final presentation imageJ簡介與應用
經過上次的報告之後,發現最大的問題是,沒有辦法將光譜準確的對應到波長。另外,如果直接用pixel插成波長,可能會導致失真,尤禎祥老師建議轉換成能量去做處理後,再轉換回波長,看能不能夠把波長校正回來。所以期末考完後,便慢慢著手進行修改,目前看起來結果還不錯,比原本的好多了!
為了固定每個光譜在圖片的位置是統一的,所以我把自製光譜儀黏上我的手機保護殼上,方便在後面處理。
接下來,先拍攝三種已知波長標準品的樣本,分別是和生科系系辦借到的LIFE NO.3101紅光雷射筆(660nm)、尤禎祥老師提供的soease綠光雷射筆(532nm)和藍光DVD讀寫頭(405nm)。 註:除綠色雷射筆波長資訊從盒子上得到外,其他波長是從網路上得到的
先把所有樣品一次開啟後,imageJ>Image>Stacks>Images to stack 進行疊圖
之後用直線選取工具,選在同一個地方。並且把所有圖片,包括標準品和樣品都>Analyze>Plot profile後,資訊都存下來。(可惜有些樣品還是位置會跑掉)
660nm標準品用兩種方式,一種是用倒數波長去處理的;一種是直接用波長和pixel去處理。
1.用倒數處理
WL405=importdata('D:\Desktop\計生實驗new final\value\紫光1.txt'); %匯入txt檔案
WL532=importdata('D:\Desktop\計生實驗new final\value\綠光.txt'); %匯入txt檔案
WL660=importdata('D:\Desktop\計生實驗new final\value\紅光.txt'); %匯入txt檔案
[MAX_PIXEL_WL405 MAX_PIXEL_WL405INDEX]=max(WL405.data(:,2)); %找peak的pixel落在哪
[MAX_PIXEL_WL532 MAX_PIXEL_WL532INDEX]=max(WL532.data(:,2));
[MAX_PIXEL_WL660 MAX_PIXEL_WL660INDEX]=max(WL660.data(:,2));
BG_interval=(MAX_PIXEL_WL532INDEX)-(MAX_PIXEL_WL405INDEX); %算出標準品中間的pixel差值
RG_interval=(MAX_PIXEL_WL660INDEX)-(MAX_PIXEL_WL532INDEX);
%把X軸用倒數處理標準品,中間用pixel數插值
X=[1/405+((1/405-1/532)*(MAX_PIXEL_WL405INDEX-1)/BG_interval):-(1/405-1/532)/BG_interval:1/405+((1/405-1/532)/BG_interval)
1/405:-(1/405-1/532)/BG_interval:1/532
1/532-(1/532-1/660)/RG_interval:-(1/532-1/660)/RG_interval:1/660
1/660-(1/532-1/660)/RG_interval:-(1/532-1/660)/RG_interval:1/660-(1/532-1/660)*(length(WL660.data)-MAX_PIXEL_WL660INDEX)/RG_interval];
NEW_X=1./X; %變回原本的波長
SAMPLE=importdata('D:\Desktop\計生實驗new final\value\Values.txt'); %匯入txt檔案
MAXdata=max(SAMPLE.data(:,2)); %抓出data亮度的最大值
Y=SAMPLE.data(:,2)./MAXdata; %把Y變數設定為只有data的第二列(亮度部分)除以最大值以Normorlize
plot(NEW_X,Y)
xlabel('Wavelength(nm)')
ylabel('Relative intensity')
title('Visible spectrum of ')
2.用波長直接去處理 (其實只差在X軸)
WL405=importdata('D:\Desktop\計生實驗new final\value\紫光1.txt'); %匯入txt檔案
WL532=importdata('D:\Desktop\計生實驗new final\value\綠光.txt'); %匯入txt檔案
WL660=importdata('D:\Desktop\計生實驗new final\value\紅光.txt'); %匯入txt檔案
[MAX_PIXEL_WL405 MAX_PIXEL_WL405INDEX]=max(WL405.data(:,2)); %找最大的pixel落在哪
[MAX_PIXEL_WL532 MAX_PIXEL_WL532INDEX]=max(WL532.data(:,2));
[MAX_PIXEL_WL660 MAX_PIXEL_WL660INDEX]=max(WL660.data(:,2));
BG_interval=(MAX_PIXEL_WL532INDEX)-(MAX_PIXEL_WL405INDEX); %算出中間pixel的差值
RG_interval=(MAX_PIXEL_WL660INDEX)-(MAX_PIXEL_WL532INDEX);
X=[405-((532-405)*(MAX_PIXEL_WL405INDEX-1)/BG_interval):(532-405)/BG_interval:405-((532-405)/BG_interval)
405:(532-405)/BG_interval:532
532+((660-532)/RG_interval):(660-532)/RG_interval:660
660+((660-532)/RG_interval):(660-532)/RG_interval:660+(660-532)*(length(WL660.data)-MAX_PIXEL_WL660INDEX)/RG_interval];
SAMPLE=importdata('D:\Desktop\計生實驗new final\value\Values.txt'); %匯入txt檔案
MAXdata=max(SAMPLE.data(:,2)); %抓出data亮度的最大值
Y=SAMPLE.data(:,2)./MAXdata; %把Y變數設定為只有data的第二列(亮度部分)除以最大值以Normorlize
plot(X,Y)
xlabel('Wavelength(nm)')
ylabel('Relative intensity')
title('Visible spectrum of ')
紅色雷射筆 660nm
綠色雷射筆 532nm
藍光DVD發射頭 405nm
我的檯燈(Flourscent lamp)
直接用波長處理的:
網路上找到的:
韋勳的檯燈(LED)
直接用波長處理的:
網路上找到的:
八舍外面的高壓鈉燈
直接用波長處理的:
疊圖,藍色的是直接用波長處理的,紅色的是用倒數做處理,和網路上找到的光譜圖對照後可發現,直接用波長處理比較符合。
網路上找到的:
報告時,曲在雯老師建議,可以加high pass filter,讓peak看起來更明顯,在這裡,我使用signal processing toolbox中的Butterworth filter處理。
Code如下,
[b,a]=butter(Filter order, cutting frequency)
[b,a]=butter(2, 0.09);
output=filtfilt(b,a,Y);
plot(X,output)
Filter order和cutting frequency是自己試出來的,看起來能消除最多雜peak的數字...,讓我們看一下高壓鈉燈的結果(紅色),藍色為原圖