- B04902064 李衡
- B04902085 何鎧至
圖片對齊使用的是 median threshold bitmaps 的演算法,我們原先試過用 C++ 來寫,主因是能夠在時間和空間上有更好的控制程式的複雜度,我們用自己寫了一個 bitmap 專用的 class,讓每個 pixel 在實際上只使用一個 bit。link here
基於除錯的難度以及和其他部分銜接的方便性,我們轉用了 Python,算法參照原 paper 的作法,程式架構也與論文裡的大致類似,轉灰階的公式也參照了論文所提的作法。
可以從下面這兩張的例子看出來,因為採用切掉的地方補 0 的做法,所以在邊界外的區域會有多一塊的現象。 無 alignment 有 alignment
HDR 的部分我們用的是 Robertson 那篇的做法,因為這個算法需要算非常久(至少 8~10 次)才會開始 coverage,而遇到大圖的時候它跑一次就會需要很長的時間(大概一個小時),如果要對三個 channel 都跑到 coverage 會花上數天。所以我們把原本拍的照片長跟寬都先縮小到 1/4,讓他對這張較小的圖片找出它的 G function(response function 的反函數),再用這個 function 跑原本大圖來算出原圖的 Radius Map。G Function 的折線圖如下 可以發現在左右兩端的值是快速下降/上升的
這個部分我們使用的是外部程式來跑 Tone Mapping,結果如下
python3 main.py -h
for help-a
for alignment,-g
to import known G function-o
to specify output file's name, default is hdrimage.hdr- when it use without
-g
, it will output G function to curve0.txt, curve1.txt, curve2.txt - ex:
python3 main.py -g img/05
to use alignment with known G function, and images are inimg/05
- images filename must be
a:b.jpg
to represent exposure time is a/b align.py
contains a functionprocess
for aligning a list of images, its parameters are as follow: a list of images, how many level of image pyramid, option of 'cv' or 'mpl' (due to color channel order)
- opencv for image IO
- numpy for calculation
- argparse for arguments