2018年11月27日

用imagej的z project分析小魚尾鰭血液流動影片,...

數週前第一次用imagej的Z project的standard deviation模式做影片疊圖,覺得在處理影片上能夠看到很特別的資訊。(那次的經驗是處理小p的影片,請見此文章

這個standard deviation的特色是讓影片變動的部份變得明顯,而不變的部份則不明顯。

最近讓學生拍小魚尾鰭的血液流動影片時,突然想起可以用imagej來分析看看,也許可以血管抓出來?不過這次分析的影片是用一年前拍攝的孔雀魚尾鰭血液流動,可見微血管


流程就如上次做《用Imagej疊圖看水波干涉的腹線(antinodal line)》那樣,到最後一步選的是standard deviation。

影片長度很長,代表影格也很多,不過並不是每個影格都適合拿來做處理,因為我需要的穩定拍攝的畫面,也就是魚鰭不動,純粹只有血液流動的畫面。

以下分別是取出100張、500張、1000張、2000張影格疊出的畫面。從100張影格疊出的畫面,的確很容易就看到近乎平行的數條血管,而且也能夠看出橫向的微血管。隨著疊加的影格越多,我發現血管之外的好幾個圓圈圈也越來越明顯,意味著在長時間的變化下(約1分鐘),那個圓圈圈是會變動的!


100 frames

500 frames

1000 frames

2000 frames


欸?引發我的好奇心,那到底是什麼?回去影片仔細觀察,原來是魚鰭上的色素細胞。在觀察血液的時候,根本就沒有留意到這個構造是會改變形狀的。當我再仔細觀察影片,才發現它們可真的會變大變小的,而且有件事讓我疑惑,本來我以為所有的色素細胞改變會是一致的,不過仔細去看才發現是有的會變大,有的會變小,看來有些事情可以拿來研究研究了。

2018年11月21日

用OpenSCAD設計聽診器的耳塞頭

也不知道是什麼神秘力量,是學生的耳朵裡長牙齒嗎?聽診器插入耳朵的部分居然會爆裂?
一時也沒想到去哪買這個頭?我想是可以去買耳機的耳機套來替換啦,不過短期之間就先用3D印表機來印一個吧。


使用OpenSCAD來寫程式生成模型吧



OpenSCAD的Code如下,放入OpenSCAD之後再存出stl檔就可以拿去印了。用pla印出的東西好不好塞入耳呢?坦白說印出來的東西硬硬的,短暫使用算是可以,但是耳朵會有點不舒服,也許改用軟料列印會好一點。



difference(){
    translate([0,0,0.5])
    rotate_extrude(covexity= 10,$fn=100){
        translate([1,0.5])
        minkowski(){
        polygon(points=[[0,0], [2,0],[4,2],[2,11],[0,11]]);
        circle(r=1);   
        }
    }
    cylinder($fn = 100,h=14,r1=2.5,r2=2.5);
}

2018年11月17日

imagej分離色頻後選取區域的方法

附圖是一個放射醫學的研究生問的問題,想要從這張圖裡把綠色的弧形區域選取出(第二張圖那樣的區域)

這樣的問題分成幾個部份:
1.怎麼圈出綠色的框框?
2.圈出綠色框之後,中間的空洞怎麼填滿?




第一個問題就用threshold就行,不過像這類黑白圖上再套疊彩色的圖,我發現把圖片轉成Lab stake的效果會比較好。(請看影片示範)

而第二個問題,會用到幾個二值化影像處理的指令,像是Dilate膨脹、Erode侵蝕、Fill Hole填洞或是Despeckle去雜點。(一樣請看影片示範)

最後得到的二值化影像(如上面第二張圖,就可以用make selection去轉成選取區)


2018年11月5日

用imagej加手機前鏡頭偵測脈搏






有很多手機app都可以利用手機的前後鏡頭來偵測脈搏,只要手指蓋住鏡頭,App可以自動偵測出脈搏。其原理是計算每幀影格的像素強度變化,可能做些濾波和數值處理。

其實好幾年前就想自己寫個程式來偵測看看,但是當時對於電腦視覺根本不熟,現在想想其實imagej就可以做處理了。

讀入影像
1.使用fiji,先在Help/Update..,更新imagej,然後在Imagej Updater的視窗左下角選擇Manager Update sites,勾選FFMPEG,然後Apply Changes。這會加入一個匯入mp4影像的外掛。安裝後重新啟動fjij



2.開啟fiji,在File/Import/Movie(ffmpeg),把拍攝的影片匯入成stack。
3.由於影片的前後不一定是需要的部份,比方說還沒拍到手指,或是手指已經離開。因此需要剪接stack。不過imagej對於stack內的slices刪除不是很好用(或者是說我還沒找到好方法),所以建議是用複製影格的方式來做,比方說第10影格到第90影格才是需要的部份,那就在Image/Duplicate...把要的影格複製出來成一個stack。

繪製像素強度變化圖(即脈搏圖)
1.利用方框選取工具,然後選擇Image/Stack/Plot z-axis profile,即可以畫出如下圖的脈搏圖




如果不嫌費工夫,也可以把stack在分離出不同色頻來分析,例如這個是分析R Channel的強度變化,雜訊會少很多。方法有點複雜
1.利用Image/Type/RGB Stack,可以把原始的stack分離出不同的色頻,然後再用Image/Stack/Plot z-axis profile來繪製。




同樣也可以分離出HSB,這個是亮度B( brightness )的圖



以下是處理過程的教學影片

2018年10月30日

用Imagej疊圖看水波干涉的腹線(antinodal line)

前幾天看到小p拿出他的兵器-做水波干涉實驗的兵器,錄製了一段影片。突然我想到我在這篇《imagej將時間資料視覺化》寫到imagej可以將時間資料濃縮,可以從中看出特別的時間資訊。

一時手癢就來把小p拍攝的影片用imagej疊圖分析看看。

1.先用youtube-dl把影片用mp4格式下載回來。
2.用fiji(特製的imagej)的file/import/Movie(FFMPEG)將mp4檔讀成stacks
3.用Image/Stacks/Z Project製作疊圖

以下分別是用Min intensity和standard deviation製作的疊圖






Min intensity是把影像中每個隨著時間變化的像素,用最小的數值(相當於最暗的)去疊出來。

而standard deviation的圖我是第一次用這疊,發現還蠻有趣的。疊出來的影像中,黑色的部份代表標準差很小,意思就是數值變動不大,所以在影片中沒什麼變化的點就會呈現黑色。而動得越厲害的部份,就會越彩色。所以左方的水波產生器顏色就很彩色。

把影片做成疊圖來分析,在看水波干涉時產生的腹線(antinodal line),如中央腹線、第一腹線、第二腹線等可是特別明顯呢。

你可能對這有興趣

Related Posts Plugin for WordPress, Blogger...