文章

目前顯示的是 2019的文章

用imagej做曲率分析的原理與實作

圖片
因為有朋友的研究需進行物體的曲率測量,因此周末研究了一下到底怎麼做。
(急著想知道怎麼做的,直接到頁面最底下看。前面一大段都是原理和原理實作)

要描述一個曲線有多彎,會用到一個密切圓的概念,曲線上取三個點,三點可成一個圓(三點都在圓弧上)。三點非常靠近時形成的圓,就是曲線上該點的密切圓。

當曲線越「彎」,密切圓就越小,而曲線越「直」,密切圓就越大。一個超大的圓,大到極大,圓弧看起來就變成直線。就像地球超大,你看海面就是幾乎是水平的。


以下兩張圖,分別可以看出在這個函數的曲線上,不同點的密切圓大小不同。







那麼曲率要怎麼描述呢?可以用1/r來表示,r是密切圓的半徑。下圖的黑線處就是這個sin函數在各點的曲率變化。



上述的過程,可以看這部影片的演示




其實要分析物體的曲率變化,其實就是要用函數圖形去貼合要測量的部分,然後去分析函數的曲率變化。接下來就是函數怎麼找出來。

方法是弄出一些控制點,用這些控制點擬合出一個多項式函數。下面的影片演示的是用ggb的FitPloy來擬合數個點來產生函數,然後再對函數求出一階微分和二階微分,再用那些微分方程式算出曲率。看起來好難,但其實意外的簡單。

這個連結裡有求曲率的公式,也詳細說明了公式怎麼出來的。
如何通俗地理解曲率?


我也繼續以ggb為工具,實際計算出雞蛋的表面曲率



用數個點去找出曲線,不只一種方法。可以用貝茲曲線或是B-spine(B樣條曲線)來做。
貝茲曲線在向量繪圖軟體,如inkscape會用到。我自己以前只是會用,但是實際原理不甚清楚,這次趁著機會也下手實作了解一下。

以下影片是用ggb來實作貝茲曲線


本來也想實作B-spine(B樣條曲線),但是發現有一點複雜,可能以後用python來實作看看吧。樣條曲線的原理說明,這篇應該是最清楚的
簡單粗暴 B樣條曲線入門


寫了一大堆之後,終於要進入用imagej測量曲率的部分了。
這裡需要使用的plugin叫做Kappa,已經有人寫得非常清楚了
ImageJ实用技巧——曲率计算与拟合(插件篇)
kappa 的github https://github.com/brouhardlab/Kappa/tree/master/docs
這裡就放一段實作的教學影片吧





用imagej做熱像影像的衍射映射變形合成

圖片
直接先來看結果吧!
以下這兩張圖,一個是手機相機拍攝的影像,另一張是熱像儀(Seek thermal)拍攝的影像。兩張影像來自不同相機、不同角度、不同焦距。影像大小也不一樣。



熱像影像有物體的溫度分佈,而相機影像有物體的紋理和邊緣,如果想要同時擁有兩者的優點,就像下圖的影像,該怎麼做呢?




我們使用imagej就可以做到了。
以下是影片教學。我也同時以文字紀錄在下


首先將兩張待處理的影像用imagej開啟,在imagej上用multi-point tool在定位點上做標記。我是在拍攝前就先以錢幣定位,分析時就是用錢幣位置來定位。做影像定位的時候,要注意每個點的順序是有意義的,兩張圖的定位點要能互相對應。

定位好了,就選擇Plugin/Transform/Landmark Correspondences,注意Transformation class要選擇affine。

如此就可以將圖片變形一致了,如下圖


下一步,由於希望將兩圖合成時,由手機影像提供物體的邊緣和紋理,所以選擇手機影像檢測邊緣。方法是Process/Find edge
圖片就會成為這樣



接下來關閉其他圖片,只留下變形後的熱像影像和邊緣化的手機影像,然後將兩張圖片疊成一張stack。
方法  Image/stack/Images to stack
選項就用預設值就好

接著就可以做疊合
方法是選擇這個stack之後,選擇Image/stack/Z project
Projection type選擇 Sum slices
這樣就可以做出精確疊合的影像了




用客製化調整的負片後像程式進行探究

圖片
前一篇【python製作的負片後像GIF】,我留下了一個問題:理論上紅色的補色是青色,但是在實際觀察上,看到的卻是淡淡的青色?

為什麼是這樣?我的答案是:背景顏色影響了你!

為了想讓這樣的疑惑成為一個能被探究的問題,我需要把這個負片後像中的許多變因,改變成可以調整的操縱變因,又為了考量到跨平台操作的簡便性,於是我使用HTML5的技術製作了這個程式,電腦或平板電腦上應該都能操作。

https://chihhsiangchien.github.io/afterimage/afterimage.html
你可以線上操作,或是右鍵下載回去,可以離線操作。它就一個檔案而已,沒有其他參照的檔案。其實它也在前一篇的同一個GitHub Repository裡
https://github.com/ChihHsiangChien/afterimage

你可以任意調整背景顏色,或是球的RGB顏色。執行速度也可以調整,不過目前有bug,速度調整後,會有一些球消失。
(以下只是程式截圖,不會真的動)




這個程式可以幫助你探究什麼事呢?
從最簡單的觀察開始,任意一種顏色產生的負片後像顏色,和原有顏色有什麼關係?使用紅色的球,在什麼參數之下可以觀察到與理論相符的青色呢?固定球的顏色之後,改變背景顏色,負片後像會發生什麼變化?你觀察到的變化效果是「線性」的嗎?背景越淺效果就越好,或是其實有一個最佳背景值?不同顏色的球,產生的負片後像顏色所需要的最佳背景值都相同嗎?執行速度會影響觀察的效果嗎?速度和效果的關係是線性的嗎?

python製作的負片後像GIF

圖片
「負片後像」這個觀察,在實驗記錄本上通常都是紅花綠葉啦、或是藍色黃色的色塊等,讓學生盯著看之後,再說出看到了什麼顏色。但其實並不是每個學生都能看到所有顏色。

後來我用了這篇【負片後像新玩法】。用那隻會變色的龍貓,效果是好多了,大概能有七成到八成的學生說看得到負片後像。

但真的想回答到底看到了什麼顏色,其實還是有困難。像實驗記錄本那種圖案,就是有學生會說看不到啊。怎麼辦呢?後來看到有一個GIF檔的效果很好,就是很多顆洋紅色的球再那轉啊轉的,幾乎學生們都看得到那樣的顏色。

這給了我一個想法,不如就來做各種顏色的轉轉轉的GIF圖吧。用上了python 的 matplotlib 的animation,就可以做出各種顏色的圖了。

程式碼和圖片都在GitHub Repository上
https://github.com/ChihHsiangChien/afterimage

用了這些圖之後的學生達成率就變成百分百了,每個學生都能夠看到。我後來上課就把這些圖放到學生的自學網站上,就直接用這來進行實驗寫觀察記錄了。


這也稍微解決了一個錯誤「標準答案」的問題。我很討厭看到測驗題目問「盯著紅花綠葉看一陣子,產生的負片後像會變成什麼顏色」,討厭的原因是那個答案根本就不是正確答案!通常給的答案是什麼?看紅花綠葉的負片後像會變成綠花紅葉。但是啊,沒有人會真的看成綠花紅葉啊,因為這根本就是錯誤答案啊。

理論上的答案應該是紅色變成青色(cyan)、綠色變成洋紅(magenta)。但是實際上看了以下的GIF之後,你就會發現其實是淡淡的青色和淡淡的洋紅(或是說是淡粉紅)。

為什麼實際觀察經驗會跟理論有差距呢?這讓我忍不住繼續動手,不如就來做一個可以客製化調整參數的程式吧。

下篇【用客製化調整的負片後像程式進行探究】

流感疫苗小知識

圖片
有鑑於每年冬天都會被傳染流感,整個人病懨懨快死掉的,今年我總算在11月去打了自費流感疫苗。
打完之後,跟診所要了藥盒和仿單來看看,做個紀錄。








這次打的疫苗名稱叫做伏適流FLUARIX TETRA,是四價的流感疫苗,成份是「去活化裂解病毒粒子」。每劑0.5毫升的疫苗含有四種流感病毒株的血凝素hemagglutinin抗原各15微克。
這裡修正一下,之前以為仿單上的字寫錯了。不過後來有讀者好心來信,其實只是美式英語和英式英語的差異。

單張上寫的haemagglutinin和hemagglutinin只是英式英語和美式英語在併寫上的分別,美式英語中haem-這個prefix會寫成hem

一微克是百萬分之一克,原來只有少少的15微克血凝素,就可以讓身體產生免疫反應,身體實在太精巧了。

血凝素的中文全名叫做血球凝集素,常聽到的H1N1的那個H就是指血凝素。病毒要附著在細胞上,就要靠這種醣蛋白,這也是人體產生中和及保護性抗體反應的關鍵。

在這篇文章《流感病毒的感染以及疫苗設計的關鍵,都在於『醣』的多寡!》提到了一項研究。研究人員把禽流感病毒表面的血球凝集素(HA)醣蛋白上多醣分子修飾成單醣分子後,用來開發出來的疫苗,可以誘發高度的免疫效力。


要挑哪些病毒株來製備疫苗呢?這是由世界衛生組織(WHO)來發布建議的。在這個公告裡頭,就說了2019-2020北半球季節流感病毒株有哪些 https://www.who.int/influenza/vaccines/virus/recommendations/2019_20_north/en/
an A/Brisbane/02/2018 (H1N1)pdm09-like virus;an A/Kansas/14/2017 (H3N2)-like virus; *a B/Colorado/06/2017-like virus (B/Victoria/2/87 lineage); anda B/Phuket/3073/2013-like virus (B/Yamagata/16/88 lineage). It is recommended that the influenza B virus component of trivalent vaccines for use in the 2019-2020 northern hemisphere i…

用Micro:bit的Java Script玩音樂

圖片
在Micro:bit的程式積木中預設就有演奏音樂的功能,不過如果要自己透過積木來編寫樂譜演奏音樂的話,積木得拉得非常長一串,實在難以編寫。於是我轉向利用Java Script開發,希望把樂曲的簡譜以陣列方式書寫,再以程式讀取簡譜的陣列來播放。

而在實作的過程中,我又遇到音高和頻率的問題,實在不想直接指定哪個音名需播放什麼頻率,於是我也轉向用程式直接計算頻率,這麼一來編寫出來的程式居然有了新功能,我能夠指定要以什麼調性來演奏。例如同樣一篇簡譜的歌曲,我可以任意指定以C大調演奏,或是以D大調、C小調演奏,完全不須更動簡譜。
而且除了演奏簡譜之外,你也可以輸入一串如圓周率的數字,這樣也能演奏出歌曲。或是DNA或蛋白質的序列都可以演奏的。

我在十幾年前寫過的兩篇序列產生音樂的介紹文【聽蛋白質唱歌】、【你也可以讓DNA唱歌】,現在你也可以用這方式自己寫程式產生音樂了。


以下就以頻率計算的部分來說明,詳細的專案我都已經錄製成影片,另外影片中使用的簡報也在最後,同時程式碼也附在簡報當中。

javaScript玩音樂01用變數產生頻率javaScript玩音樂02從簡譜數字產生頻率javaScript玩音樂03用pi來演奏歌曲javaScript玩音樂04用文字序列來演奏歌曲javaScript玩音樂05輸入簡譜來演奏歌曲javaScript玩音樂06改變調性來演奏javaScript玩音樂07全部改寫成函式

簡報 https://docs.google.com/presentation/d/1oiTV2FZl3g6xoEAYOyrB-N58UG8BzBNby9efYuhM-Qc/edit?usp=sharing

以下幾張簡報要說明的是下面這串程式是怎麼寫出來的,這是最基本的程式,細節都可以看影片的說明 let scale = [0, 2, 4, 5, 7, 9, 11] let start = 60
input.onButtonPressed(Button.A, function () { let sound = 1 let playtime = 150 let midiNumber = start + scale[(Math.abs(sound -

科學論證:親子鑑定-Jeff 是不是H家的小孩

圖片
這個論證的練習活動出自Scientific Argumentation in Biology: 30 Classroom Activities的活動5
【DNA Family Relation Analysis 】

故事是這樣發展的,H先生和H太太育有五個小孩,三男二女。但不幸的是最小的六歲兒子被綁架了,經過警察多年查案,仍然無法釐清案情。
二十年過後,一個年輕的男子 Jeff 找上H家,他說他就是多年前被綁架的那個小男孩,但是H一家非常懷疑,於是求助於DNA鑑定,然而H先生已經在多年前車禍往生,能提供DNA證據的就只有H太太和其他子女了。

請根據這些STRs來分析到底 Jeff是不是H家的小孩?

完整學習單文件於此連結
https://docs.google.com/document/d/1yF5XszGaqEKG7wHPygQVG1n6CbocN1Pvv5MhHKLtM-M/edit?usp=sharing
Jeff 是不是H家的小孩 D13S317 Chromosome 13 D21S11 Chromosome 21 TH01 Chromosome 11 D7S820 Chromosome 7 STRs
Mrs. H

科學論證:烏魚和海水溫度的關係

圖片
這個論證練習活動,是給予學生數篇文章進行閱讀之後而進行的。

提供的四篇文章分別是烏魚的基本資料,還有關於捕撈烏魚的相關新聞。
不同的班級間用了兩種不同的模式來進行,

模式一:針對同一問題,我已經提出了三種不同的主張,請學生搜索文章中的資訊,分別針對不同的主張提出證據和推理。模式二:已經給予部分證據,請學生自己提出問題與主張,並對證據提出解讀。
活動的重點在於文章的閱讀理解,學習與整理相關的資訊,並能理解圖表與解讀圖表

完整的學習單文件如下連結
https://docs.google.com/document/d/1XTNqw6iiTBWDlGHBtZZa00zCdqjBvrdnC2OM-j1ZkJg/edit?usp=sharing





烏魚基本資料 烏魚為熱帶海洋群集性的魚類,分佈廣泛,從日本、中國的江蘇、浙江、福建、廣東及台灣等沿海皆有出現。本漁業的烏魚種類計有5屬10種,其中鯔魚(Mugil cephalus)的產量最豐,也被稱為「正烏」。每年國曆12月冬至前後十餘天為烏魚的繁殖季節,當東北風吹起時,隨著海水溫度的下降,烏魚開始從中國沿岸隨南下的寒流,進入台灣西部海岸,最初從新竹沿岸開始漸次南下,找尋適當海域產卵,洄游的適水溫約為18.5~22℃,初期的個體尚未完全成熟,12月中旬抵達嘉義布袋以北的沿岸海域,1月以後至高雄茄萣沿海,雌雄生殖腺即告成熟,洄游速度也隨生理的需求而加速,1月下旬至2月初至屏東枋寮海域產卵、排精,約兩星期後,魚苗便孵化出來。孵化的稚魚由於身體弱小無法忍受北方的寒冷,並不跟隨親魚洄游,通常是沿著台灣沿岸逐漸往北移動成長,喜棲息於淡鹹水混合的港灣或河口域。產卵後的親魚,以疲憊瘦弱的身體,掉頭洄游,沿著比原來的洄游路徑稍遠的離岸海域逐漸北上,在淡水河外轉向,返回中國沿岸海域。


〔自由時報記者王榮祥、丁偉杰╱綜合報導〕台灣往年冬至前後,烏魚洄游至台南、高雄外海,成熟度最適合捕撈,但昨天已是冬至,南部兩大捕烏漁港 – 茄萣興達港、梓官蚵仔寮漁港,尚未傳出捕獲烏魚的喜訊,去年茄萣還出現「零」捕獲量紀錄,漁民談到烏魚就嘆氣。

在中部,昨天嘉義捕烏的漁民也沒有斬獲,連同前幾天,也只捕獲零星數十尾;東石魚市場主任黃登財說,今年烏魚少得可憐,但烏魚汛期還未完全過去,如果氣溫持續下降,烏魚洄游群南下,還有希望捕獲「烏金」。

儘管還抱持希望,漁界對中國的胡作非為仍氣憤不已。…