發表文章

用GIMP畫出像素畫

圖片
下面這些圖稱為像素畫,就像古代的電動玩具畫面那樣。如何自己畫出這些圖呢?用開源的GIMP就可以。
簡單說就是原圖降尺寸,調成索引色,再修改部份顏色後,再把原圖尺寸變大就完成了。可以用在物品或人物上,猜得出來下面兩位是誰嗎?
最底下我放了製作的影片,有興趣可參考。





















自動上字幕的pyTranscriber 和 autosub

圖片
昨天試用了自動上字幕的pyTranscriber,真是神器。
使用介紹 pyTranscriber 影片自動上字幕免費軟體!10分鐘搞定1小時影片
pyTranscriber 的GitHub https://github.com/raryelcostasouza/pyTranscriber/
最新軟體下載處 https://github.com/raryelcostasouza/pyTranscriber/releases/tag/v1.3-stable

我的教學影片每片約10分鐘,用此軟體上字幕的時間不到1分鐘,正確率很高,但問題應該是我的口齒不清。我用VLC看字幕上去的效果,快被自己笑死。

下圖這個片段原文其實是「葉子照到陽光之後會這樣反光,這反光就是這些角..質層。」,結果「反光,這反光」聽成了「膀胱解膀胱」


這段本來是說「咖啡色的就是之前我們看鴨跖草的時候,叫你撕的那層皮」 結果變成「咖啡這種的就是之前我們在看鴨子吵的時候叫你吃的那層皮」,一整個變得很合理,也很兇殘


字幕辨識出來之後,其實都還要再經過手動調整。推薦可以用Aegisub 這套軟體來調整,最後就可以跟著一起丟進Youtube去上字幕了。

以上是用學校電腦有win7的試做,回到家之後改用ubuntu結果問題很多。首先是 pyTranscriber 雖然有for linux的,但是使用上一直crash,很難修。所以我就看 pyTranscriber 的說明 ,它是從autosub folk來的。所以我就改下載 autosub 來做,沒有GUI,要直接在終端機下指令執行。

不過執行的時候一直error,才發現它是用python2寫的,偏偏我環境都已經改用 python3了,要不我就是為了這軟體再弄一個python2的環境,不然就是要改寫程式。

還好後來看到 https://github.com/agermanidis/autosub/issues/141 有提出這個討論

The current version of autosub does not seem to work with python3. However, I've found that the code can be fixed as follows:

For all python files in the project, r…

脫個褲子也會把肌腱弄斷?槌狀指的人生開始

圖片
週四一早上廁所時,一脫褲子聽到「啪」一聲,覺得左手無名指怪怪的,抬手一看,最末端的指節居然伸不直?








手指頭也沒有痛感,又趕著上班,就先擱著等明天有空再去看醫生。一天下來唯二的不便是跨過杯口抓杯子的時候,無名指會自己先去泡水,第二是打字時會按錯鍵,於是我乾脆先用膠帶固定手指。


到隔天下午去看復健科,醫生一看就說這肌腱斷掉了,然後幫我用鋁板固定指頭,醫生交待這要這樣維持好幾週,等肌腱自己長好,如果未來沒有長好再考慮用手術處理。


除了這樣的固定外,其實外面另外還加了紗布套,又用親膚膠帶固定著包成一大包,感覺好像手指整根斷掉,醫生也交待這段時間如果要洗澡就用保鮮膜包著。但其實並不是有傷口怕碰水,而是怕這些固定材料碰水。









四根指頭的伸直都由指伸肌(Extensor digitorum muscle)負責,由肌腱連接到指骨控制。在手背上看到的「筋」就是指伸肌的肌腱。




這種症狀的發生是因為手指屈曲時又被強力撞擊,肌腱就和指骨分離了,所以最後一個指節就會垂垂的。這個症狀叫做槌狀指,英文是mallet finger 或叫hammer finger,看到的資料指出大概要固定指骨位置6-8週讓肌腱長回才能恢復。



許多人發生的原因是接球撞到手指,也有看到一個案例是飛行員脫毛衣的時候發生,但就是沒有看到有人是大便脫褲子時發生這種事。

前一天在診所做的固定其實不太方便,無法正常洗手洗澡,打字也打不了,於是我就自己想做一個。一開始在thingiverse上看到有人用3D印表機做了副木(Splint),本來都下載了在半夜一點要印了,但才發現未使用的印表機居然零件壞了,所以我還得先找其他台來印零件修復它才行,於是只好放棄先睡再說。


一早想起可以用其他方式做出客製化的副木,那就是用熱塑土來做。








熱塑土又叫熱塑水晶,放進60度熱水裡就會軟化如熱熔膠般,拿出後在手指上先繞在指頭上做出兩個指環,再用兩段材料固定兩指環,副木的雛型就完成了。


但是硬化後的熱塑土會縮小,所以副木就會鬆鬆的,無法確實固定,所有最後再用少許熱塑土填塞在指環內部,讓末梢指骨能往指背微屈翹起。







這種作法最大的優點就是塑型快速,而且確實符合指型,又可以好好洗手洗澡。希望大家肌腱都斷掉,都來自己試一試。
=============================
3/8更新
看醫生的當天就下訂了一個固定套,感謝物流快速,很快就收到了。我必須…

pH對氣孔開度的影響

圖片
上週一個畢業生回來學校找老師,順道在操場上攔截了我,問我一個做實驗的問題。他們的實驗是觀察鴨跖草的氣孔,在不同pH值下的變化。他們發現實驗結果有點奇怪,所以這次回來剛好遇到我就順便問了我。

當下其實我也不知道實驗結果應該怎麼樣,不過回到辦公室就上網看看有沒有相關研究。結果在Research gate看到一篇研究就是做這個的

論文連結 Species-dependent changes in stomatal sensitivity to abscisic acid mediated by external pH

我翻閱之後覺得實驗方法和結果都很有意思,所以就整理如下。


這項研究的材料是鴨跖草(Commelina communis L)和阿拉伯芥(Arabidopsis thaliana),採取葉下表皮先放置在蒸餾水中等待移置。實驗分兩階段,先放在pH 5或pH 7的MES/TRIS緩衝液中三小時,讓氣孔開度進入穩定狀態(steady-state aperture value)後,測量氣孔數據後,再個別移置到不同的pH值液體中兩小時,每隔20分鐘測量一次氣孔數據。(也就是原本放在pH 5 三小時的下表皮,會被移到pH 7的溶液中放兩小時。而原本放在pH 7的會改放在pH 5。)

以下是實驗結果

首先是氣孔的寬度和氣孔面積的相關性,氣孔的寬度越大,氣孔的面積就越大






再來看浸泡在不同pH中三小時,氣孔的面積有什麼不同?看鴨跖草的黑色那兩條,泡在pH 5的比泡在pH 7的氣孔要小。而在阿拉伯芥,泡在不同pH的液體中,氣孔面積差異不大。




接下來看看泡了三小時的溶液後,改放在不同的pH中,氣孔面積有什麼變化。從pH 7到 pH 5 ,跟預測的一樣,pH降低氣孔就會關閉。但是pH 5的放到 pH7的卻沒有如預期的會讓氣孔打開,反而也是縮小。而從阿拉伯芥的實驗中,發現不同pH對氣孔的影響和物種也有關係,並非在不同物種間都有一致性的結果。



再來是圖表稍微複雜的實驗,我把兩張圖合併起來一起看。實驗方法是把泡了某pH溶液三個小時的下表皮,改放在(1)相同或不同的pH液體 (2)不同濃度的ABA中。所以每種植物就有8種不同實驗組合了。

從衛星雲圖看塔爾火山(Taal)噴發

圖片
2020年1月12日,位於菲律賓首都馬尼拉南方65公里的塔爾火山(Taal)噴發,這場噴發在衛星雲圖上也看得到。

晚上看到這消息,我立刻用python寫了script抓了氣象局的衛星雲圖來處理,除了可見光圖層沒放進來,其他都放了。(因為可見光圖層在下午四點多就變黑了)。

圖片從下午兩點開始,每個frame間隔10分鐘。
程式碼和圖片都在GitHub
https://github.com/ChihHsiangChien/volcano/

用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
這樣就可以做出精確疊合的影像了