作者hotdogee (hotdog)
看板DSLR
標題[作品] 日環蝕4K縮時 開發專屬穩定化程式 [P950]
時間Mon Jul 6 04:49:43 2020
作品連結:
* 穩定前:
https://youtu.be/71vtskpdcXA
* 穩定後:
https://youtu.be/M4H9w8yh4Fg
拍攝時間:2020/6/21
拍攝地點:海口故事露營園區
使用相機:Nikon P950
濾鏡:Ice 67mm ND100000
-
https://i.imgur.com/FRsYups.jpg
赤道儀:Sky-Watcher Star Adventurer
-
https://i.imgur.com/HyhZPv8.jpg
-
https://i.imgur.com/kUtBhWJ.jpg
-
https://i.imgur.com/UIrNOHN.jpg
-
https://i.imgur.com/unEBClo.jpg
定時快門線:PIXEL TC252
三向齒輪雲台:Manfrotto MHXPRO-3WG
EXIF資訊:曝光秒數 1/1000秒
光圈 F6.5
焦距 2000mm
ISO速度 100
拍攝現場:
* 攝影中:
https://i.imgur.com/NHeoc5Y.jpg
* 拍攝現場 (360全景 8K縮時):
https://youtu.be/Erfkf5JPJl0
* 現場機海 (360全景 16K):
https://kuula.co/share/7bTy7
* 蚵田日落 (360全景 16K):
https://kuula.co/share/7bTWs
出動相機:
* 日環蝕縮時:Nikon P950
* 隨意拍:Nikon D7000 + Sigma 8-16 + Nikon 18-300 + Nikon 35 f1.8
* 8K全景錄影:Qoocam 8K
* 16K全景攝影:Xphase Pro S
技巧解說及心得分享:
日環蝕拍攝共得 3868 張 DNG 原始檔,因種種因素每張的太陽都不在定點,
因過程調整赤道儀與腳架,月球進出的角度也不固定。如果直接硬疊起來就是
開頭穩定前的連結那樣。
試了好多方法,但是現有穩定化與自動對準軟體遇到這次日環蝕照片通通破功,
原因是背景是幾乎全黑的,背景沒有任何跨所有照片的固定細節可以讓軟體抓,
而前景太陽也因為日蝕的關係每張圖的太陽的形狀都不固定,
太陽本身也沒有高對比的固定細節可以抓 (除非用很貴的窄頻 Ha 濾鏡)。
要將所有照片穩定化可分為兩個工作:
1. 固定太陽的位置 (找出太陽的中心座標)
原始彩色圖 -> 灰階 -> 黑白(臨界值25) -> A
製作大小與太陽一樣大,寬度 50 的黑白遮罩 -> B
分別將 A 與 B 做傅立葉轉換後在頻域相乘後再將結果做逆傅立葉轉換即為捲積 -> C
取 C 圖中亮度最大的座標即為太陽中心座標
幾個例子計算結果:
https://i.imgur.com/IufL1Lj.jpg
2. 固定月亮進出的角度 (找出月亮的中心座標)
將太陽置中後 -> 灰階 -> 黑白(Otsu演算法) -> A
製作大小與月亮一樣大的黑白圓盤遮罩 -> B
一樣用傅立葉轉換計算 A 與 B 的捲積 -> C
取 C 途中亮度最小,且最接近太陽中心的座標即為月亮中心座標
同樣幾個例子的計算結果:
https://i.imgur.com/k94dy4B.jpg
程式中心偵測結果,紅圈為太陽,綠圈為月亮:
https://i.imgur.com/NjU8i99.jpg
兩個關鍵座標找出來後,即可全部調整到同一個位置與角度:
https://i.imgur.com/IOidzcU.jpg
== 程式下載 ==
開放原始碼與英文使用說明:
https://github.com/hotdogee/solar-eclipse-timelapse-aligner
EXE下載:
https://github.com/hotdogee/solar-eclipse-timelapse-aligner/releases/download/
v1.0/solar-eclipse-timelapse-aligner-v1.0-windows-x64.zip
縮:
https://bit.ly/3eiVabp
範例輸入圖檔下載:
https://drive.google.com/file/d/10VEHLhs8JEQbKvKjmRGHTbSi0DoADwVS/
簡易中文使用說明:
1. 把JPG圖片複製到一個新的資料夾作為輸入資料夾 (例如 D:\jpg),
用自己的圖檔前建議先用以上範例輸入圖檔試跑看看。DNG圖請先輸出為JPG。
2. 挑一張太陽最完整的圖,給程式自動偵測太陽半徑使用 (例如 D:\jpg\DSCN3815.jpg)
指令:eclipse-aligner.exe --input=D:\jpg --sun=D:\jpg\DSCN3815.jpg
若沒有完整太陽的圖,或是自動偵測結果不夠精準,可以手動給半徑 (1210像素):
指令:eclipse-aligner.exe --input=D:\jpg --sun_radius=1210
3. 執行完成後會產生三個新資料夾與一個JSON檔。
jpg-output:太陽置中後的結果圖。
jpg-circled:原始圖加上偵測到的圈圈,用來判斷偵測結果好壞,與參數調整用。
jpg-sun-binary:黑白照片,如果太陽邊緣毛毛的或不夠清晰,
可以增減參數 --sun_threshold=25 預設為25,高於此灰階亮度為白色。
circles_data.json:包含偵測到的太陽座標資料。
4. 如果置中後,月亮的進入的角度也不夠穩,可以啟用角度修正功能
指令:eclipse-aligner.exe --input=D:\jpg --sun=D:\jpg\DSCN3815.jpg
--fix_angle=17 --moon_radius_mod=-24
--fix_angle=17 會把角度修正為17度
--moon_radius_mod=-24 表示月亮半徑比太陽小24像素
--
※ 文章網址: https://webptt.com/m.aspx?n=bbs/DSLR/M.1593982188.A.842.html
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/06/2020 04:53:00
1F:推 seth5421: 頭推 07/06 05:00
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/06/2020 05:09:50
2F:推 antitank: 高手 07/06 07:16
3F:推 changmada: 大神!作品真是完美 07/06 07:45
4F:推 AzureSoul: 看到傅立葉轉換我就跪了 07/06 07:58
5F:推 Lian949: 已跪 07/06 07:59
6F:推 carl3104: 該快推不然網友以為我看不懂 07/06 08:46
7F:推 zaqwer: 這裡不是DSLR板嗎?為什麼我都看不懂?! 07/06 08:52
8F:推 lvlvlv2g: 傅立葉到底是誰啊啊啊啊啊啊啊啊(崩潰 07/06 08:55
9F:推 carl3104: 樓上 我記得是某個風景攝影大師吧 07/06 09:16
10F:推 soarling: 不囉嗦 看到FT就推 07/06 09:24
11F:推 notsmall: 原來是影像處理大師啊 07/06 09:29
12F:推 zebirlin: 太強 已跪 07/06 09:32
13F:推 Rogozov: 看到攝影版出現傅立葉轉換真的是只能跪了 07/06 09:33
14F:推 AnewMitch: 跪了 07/06 09:36
15F:推 x81089130: 推 07/06 09:36
16F:推 hchen18: 第一次在攝影版看不懂文章XDD 07/06 09:44
17F:推 DaJoJo: 強 07/06 10:01
18F:推 Wangdy: 快推不然別人因為我看不懂 07/06 10:20
19F:推 shachitw: 太神啦 07/06 10:22
20F:推 Jokering5566: 科學精神 給推 07/06 10:25
21F:推 taleschia: 我媽問我為什麼大中午要跪柏油地面... 07/06 10:31
22F:推 penguin0172: 想請問原po將兩張相片做convolution可以得到中心座標 07/06 10:32
23F:→ penguin0172: 的原理是什麼?謝謝 07/06 10:32
24F:推 meimeiamy: 我媽問我為什麼跪著看手機 07/06 10:39
25F:推 eiki787: 傅立葉轉換 早就忘光光的東西 07/06 10:46
26F:推 haze: 好強!!! 07/06 10:53
27F:推 enderboy7652: 強 07/06 10:58
28F:推 briantw: 推,這我跪了... 07/06 11:00
29F:推 yen0619: 跪了 07/06 11:08
30F:推 blessme: 下次有人說學數學沒用我就拿這篇打臉他 07/06 11:10
31F:推 louis2333: 有沒有人支援一下白話文.. 07/06 11:11
32F:推 XiaoSung: ?????先跪了 07/06 11:20
33F:推 octboy1978: 不懂……快推 07/06 11:28
34F:推 GohHiong: 我記得明明學過傅立葉可是看不懂這篇XD 真的太神了! 07/06 11:32
35F:推 pupuliao: 我的理解是 因為每一張照片的中心點會有所偏差 07/06 11:33
36F:→ pupuliao: 所以要透過找出太陽中心 重新調整每一張照片 07/06 11:34
37F:推 cowboy17935: 看不懂 只好推了 07/06 11:34
38F:推 kblover: 超神~ 07/06 11:34
39F:→ pupuliao: 那這樣說天文台的設備應該可以抵銷這類誤差 07/06 11:35
40F:推 SonyA7RIII: 您是神 07/06 11:38
41F:推 st210113: 我以為走錯版了 原PO太強大啦 07/06 11:39
42F:推 ceoper256: 22樓:把convolution想像成兩個函數的空間乘積的話 07/06 11:41
43F:→ ceoper256: 就可以把捲積結果當成「遮罩與太陽輪廓重疊面積最大」 07/06 11:43
44F:→ ceoper256: 的位置,因為是圓形所以這位置就是太陽圓心,大概吧 07/06 11:45
45F:→ ceoper256: 低智商文組建構式理解勿嗆QQ 有請高手說明實際的計算 07/06 11:46
感謝幫忙說明,我也試試補充說明,以本文太陽版用法來說,請看文內附圖輔助,
A 圖解析度為 4,608 x 3,456 = 15,925,248 像素,這是 P950 的解析度 16M。
B 圖(遮罩)解析度為 2,423 x 2,423,因為這是我拍到的太陽的大小。
A 與 B 圖皆為黑白,來想像捲積計算:
* 對 A 圖內每一個像素做以下運算,有 15,925,248 個像素,所以要做 15,925,248 次:
* 把 B 圖(遮罩)中心對齊疊在該 A 圖像素後,
計算 A,B 兩圖相疊的地方,顏色都是白色的像素位置有幾個。
因此可以想像當上述遮罩中心跑到 A 圖太陽中心時,A,B 兩圖都是白色的數量會最大化,
也可以想像當遮罩中心從太陽中心往上下左右任何一方向移動後,
A,B 兩圖都是白色的數量都會下降,
所以取捲積結果內,數字最大的座標即為太陽中心座標。
由此可知本法要能正確找到太陽中心座標的關鍵在於遮罩的設計,
與太陽能否很乾淨地從背景分離出來,
遮罩的大小一定要剛好符合你所拍到的太陽的大小,遮罩太大或太小都會造成
捲積結果有多個座標都是最大值,而造成選擇困難的誤差。
如果太陽邊界不夠乾淨,例如有光暈,可能需要多嘗試幾個轉黑白的臨界值,
直到找到乾淨的黑白太陽邊界,程式才會準。
* 額外說明:
直接計算這個捲積共需要做:
4,608 x 3,456 x 2,423 x 2,423 = 93,496,000,315,392 個乘法與
幾乎一樣多個加法運算,如果簡單用一個時脈一個運算來看,
5GHz 的 CPU 也要花 93,496,000,315,392 / 5,000,000,000 = 18,699 秒
約 5.2 小時才算的完,而本篇每張圖都用了兩次捲積,
一張圖要花上半天是無法接受的。
但若使用傅立葉轉換法,只要 2~3 秒即可完成。
推
rinkai: 樓上土木巨巨大大大說自己文組那我們乾脆ryyyyyy 07/06 11:59
46F:推 m18680768: 好猛! 07/06 12:40
47F:推 john801110: 所以這個程式是大大自己設計的?能出下載版嗎XDD我極 07/06 12:42
48F:→ john801110: 軸沒對準也是慢慢偏移 07/06 12:42
49F:推 diablohinet: 超強...已跪 07/06 12:59
50F:推 godchildtw: 還以為有EXE可以用了,2300多張手動一張一張調, 07/06 13:01
51F:→ godchildtw: 剩下200張就調完了。 07/06 13:01
52F:推 jeffc815731: 好強 最後幾乎是教科書級的照片 07/06 13:53
53F:推 tom2541c2: 我媽叫我不要再跪著滑手機了 07/06 14:18
54F:推 Epsilon: 強!要不要考慮釋出原始碼或可執行檔讓其他人下載? 07/06 15:50
55F:推 andy3020: 學生時期沒搞懂過傅立葉........太猛 07/06 15:53
56F:推 pirrysal: 太神啦! 07/06 16:01
57F:推 erig25: autocorrelation? 07/06 16:23
58F:推 rainxo6p: …是神 07/06 16:27
59F:推 IslandHeart: 這可以寫論文了XD 07/06 16:57
60F:推 windblood: 先跪在說... 07/06 17:07
61F:推 leion237: 推推推,我日環蝕是手動追日五分鐘拍一張,再土法煉鋼用 07/06 17:23
62F:→ leion237: PS圖層去對齊超花時間XD 原PO實在是實作高手 07/06 17:24
看來也有幾位版友有類似的需求,我正在整理一個比較能看的版本並會釋出原始碼,
目前的狀況是參數是寫死在程式內,我覺得至少還需要再寫一個文字介面,
也要寫一下使用說明,並打包成 EXE 給沒有安裝過 Python 執行環境的人使用,
這些工作還需要花一點時間,如果沒有花太久會直接更新在本篇~
63F:推 janghow: 太強大了 07/06 17:30
64F:推 Kln: 跪得我膝蓋好痛 07/06 17:55
65F:推 HsuHsiangYun: 看不懂XDD 07/06 18:14
66F:推 newsbow: 跪 07/06 18:53
67F:推 SDGGF: 這光看懂就夠我頭昏,佩服大大的實作精神 07/06 19:35
68F:推 Chdolodocha: 看不懂 跪 07/06 19:38
69F:推 mjrt: 你的海堤全景照片竟然錄到我在收東西… 07/06 19:42
70F:推 robin80829: 太猛了!推 07/06 20:02
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/06/2020 20:22:52
71F:推 ray6031515: 讚 完全看不懂哈哈哈 07/06 20:39
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/06/2020 21:20:15
72F:推 bluefancy: 道具太專業 07/06 21:32
73F:推 ferrinatice: 我以前學傅立葉只會時域轉頻域,看不懂為何這樣可以 07/06 21:53
74F:→ ferrinatice: 降低運算量耶,是否能補充說明 07/06 21:53
如果輸入影像大小為為 M x N,遮罩大小為 m x n
直接計算捲積的計算複雜度為 O(MNmn)
傅立葉法的計算複雜度為 O(MNlog(MN))
主因在於時域下的捲積等於頻域下的相乘;頻域下的捲積等於時域下的相乘這個理論。
如果有夠快的傅立葉算法,頻域下只要處理 MN 個複數乘法,
相較於時域下 MNmn 個實數乘法。
配合 FFT (Fast Fourier transform) 演算法的發明,
讓離散傅立葉轉換的計算複雜度得以接近理論最小值 O(NlogN)。
實務上當你的輸入與遮罩大小比較小時,例如教科書上常見的 3x3 或 5x5 時,
用傅立葉法反而會比較慢。
75F:→ hotdogee: 其實是道具、經驗、技術都不足,只會靠後製qq 07/06 21:56
76F:推 Kln: 原po的解釋很清楚,很清楚地讓我明白,我真的完全聽不懂XDDD 07/06 22:53
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/06/2020 23:19:29
77F:推 mikechang: 推! 07/06 23:21
78F:推 chen841115: 跪了 07/06 23:32
79F:推 ahaw99: 對不起 我沒有資格拿相機 07/06 23:46
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/06/2020 23:49:31
80F:推 cutebowbe: 我以為我走錯版了 路過抱歉 07/07 01:24
81F:→ cutebowbe: 第一次逛完DSLR版不是去google設備規格,而是去google 07/07 01:25
82F:→ cutebowbe: 數學名詞XDDD 07/07 01:25
83F:推 alan773421: 誰說數學沒用 07/07 10:16
84F:推 pupuliao: 研究所做影像分析的路過 好強 我只看懂 最前面的方法 07/07 11:23
85F:→ pupuliao: 傅立葉轉換我不會 不過 第一種方法 實際運算量不會那麼 07/07 11:23
86F:→ pupuliao: 大 因為 每次運算實際上 只有B框的 最外一圈會改變 07/07 11:25
87F:→ pupuliao: 痾 好像不太對 算了XD 畢業太久了 07/07 11:26
88F:推 kblover: 工數有教啦 簡單講就是透過時頻轉換後結果相同 07/07 11:57
89F:推 kblover: 但是在頻域做速度快 做完再把結果轉回時域 07/07 11:58
90F:→ kblover: 不過好像不是每個系所都有教到這段XD 07/07 11:58
91F:→ kblover: 我自己要不是看這段也都忘得差不多了XDDD 07/07 11:58
92F:→ kblover: 我沒記錯的話是這樣啦 記錯就...請幫補充 07/07 11:59
93F:推 ttamura: 推 傅立葉轉換也能用在影像鑑識領域! 07/07 21:09
94F:推 DrFuck: 不明覺厲.......。 07/07 21:19
95F:推 wbenjin: 我覺得你直接在空間域convolution會比較快,畢竟pixel沒 07/07 23:38
96F:→ wbenjin: 很多 07/07 23:38
97F:→ wbenjin: 喔你的kernel很大,那應該是轉到頻域比較快,沒事 07/07 23:39
98F:推 canandmap: 強 07/08 00:52
99F:推 molk: 哇嗚… 07/08 10:43
100F:推 rgbff: 同事問我為什麼跪著看PTT,還有傅先生是誰 07/08 12:57
101F:推 runJ13: 推,最後一張好像我以前色彩學的作業 07/08 21:39
102F:推 crayon3shawn: 推推 雖然看不懂 07/10 13:55
已於文末補上程式下載位址與簡易使用說明囉,如果使用上有問題歡迎提問~
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/11/2020 01:03:16
※ 編輯: hotdogee (140.112.93.11 臺灣), 07/11/2020 03:26:25
103F:推 capri75: 推 雖然完全看不懂 Orz 08/04 19:32
104F:推 LzHH: 先跪 08/06 10:37