文章

目前顯示的是 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); and a B/Phuket/3073/2013-like virus (B/Yamagata/16/88 lineage). It is recommended that the influenza B virus component of tri

用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[

科學論證:親子鑑定-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 Child 1 Child 2 Child 3 Child 4 Jeff M. D13S317 D21S11  TH01  D7S820  議題或問題 主張或答案 支持這個主張的證據 以科學原理或科學概念,推理出證據為什麼支持主張的理由 對立主張(欲反駁的,你覺得不成立的) 證據 理由

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

圖片
這個論證練習活動,是給予學生數篇文章進行閱讀之後而進行的。 提供的四篇文章分別是烏魚的基本資料,還有關於捕撈烏魚的相關新聞。 不同的班級間用了兩種不同的模式來進行, 模式一:針對同一問題,我已經提出了三種不同的主張,請學生搜索文章中的資訊,分別針對不同的主張提出證據和推理。 模式二:已經給予部分證據,請學生自己提出問題與主張,並對證據提出解讀。 活動的重點在於文章的閱讀理解,學習與整理相關的資訊,並能理解圖表與解讀圖表 完整的學習單文件如下連結 https://docs.google.com/document/d/1XTNqw6iiTBWDlGHBtZZa00zCdqjBvrdnC2OM-j1ZkJg/edit?usp=sharing 烏魚基本資料 烏魚為熱帶海洋群集性的魚類,分佈廣泛,從日本、中國的江蘇、浙江、福建、廣東及台灣等沿海皆有出現。本漁業的烏魚種類計有5屬10種,其中鯔魚(Mugil cephalus)的產量最豐,也被稱為「正烏」。每年國曆12月冬至前後十餘天為烏魚的繁殖季節,當東北風吹起時,隨著海水溫度的下降,烏魚開始從中國沿岸隨南下的寒流,進入台灣西部海岸,最初從新竹沿岸開始漸次南下,找尋適當海域產卵,洄游的適水溫約為18.5~22℃,初期的個體尚未完全成熟,12月中旬抵達嘉義布袋以北的沿岸海域,1月以後至高雄茄萣沿海,雌雄生殖腺即告成熟,洄游速度也隨生理的需求而加速,1月下旬至2月初至屏東枋寮海域產卵、排精,約兩星期後,魚苗便孵化出來。孵化的稚魚由於身體弱小無法忍受北方的寒冷,並不跟隨親魚洄游,通常是沿著台灣沿岸逐漸往北移動成長,喜棲息於淡鹹水混合的港灣或河口域。產卵後的親魚,以疲憊瘦弱的身體,掉頭洄游,沿著比原來的洄游路徑稍遠的離岸海域逐漸北上,在淡水河外轉向,返回中國沿岸海域。 〔自由時報記者王榮祥、丁偉杰╱綜合報導〕台灣往年冬至前後,烏魚洄游至台南、高雄外海,成熟度最適合捕撈,但昨天已是冬至,南部兩大捕烏漁港 – 茄萣興達港、梓官蚵仔寮漁港,尚未傳出捕獲烏魚的喜訊,去年茄萣還出現「零」捕獲量紀錄,漁民談到烏魚就嘆氣。 在中部,昨天嘉義捕烏的漁民也沒有斬獲,連同前幾天,也只捕獲零星數十尾;東石魚市場主任黃登財說,今年烏魚少得可憐,但烏魚汛期還未完全過去,如果氣溫持續下降,烏魚洄