圖片匹配,給兩張圖片 A, B ,問 B 要對齊 A 的哪個位置, 可以使得 A, B 之間像素差平方的和最小? 根據題目敘述,可以知道 因為 在哪裡都一樣,只要算 和 的部分就可以了。 可以用二維 prefix sum 求到, 需要利用 FFT + 卷積。 並求出最小的 diff 傳送門 ZJ_b451 ZOJ1637 兩題一樣, FFT 程式碼就是借用 ZOJ 的。 ZeroJudge b451 程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44... Read more 25 Jul 2017 - 6 minute read
簡單來說,就是一種將材質(紋理)轉換到目標圖片上的效果。 結果 原始材質: 放上方表原圖,放下方代表結果。 Lenna 圖: Miku: (慢慢強化效果) 一些實作細節 可以想像成,在材質中找很多固定大小的小方塊,由左而右、由上而下嘗試拼出原始圖片的樣式。 要決定要使用哪個小方塊,我的做法是計算方塊範圍內的 “亮度總和” ,與要貼上的原始圖片範圍內的亮度總和相減、取絕對值,找到一個差異最小的方塊貼上即可。 這樣做的好處是,可以使用二維的 prefix sum ,快速 得出矩形區域內的亮度總和,使得整隻程式跑起來不會太慢,又可以達成不錯的效果。 來定義一下亮度吧,一個像素的亮度就以它的 來表示。(雖然與視覺上的亮度定義不相同,但是比較... Read more 23 Jul 2017 - 5 minute read
Shared library 是很方便的東西, 除了 library 本身可重複利用外, 因為主程式是在執行時,才將 library link 進來, 也可以減少主程式佔的硬碟空間。 另外一個好處,如果主程式需要修改,但 shared library 不用, 那麼只需要重新編譯主程式就好了,省去重新編譯 library 的時間。 建造一個 shared library 首先,先編譯好我們需要的物件檔 (object file): g++ -c -fPIC alice.cpp bob.cpp -fPIC: 告訴編譯器產生無關位置程式碼 (Position-Independent Code) ,這樣在 shared library 被載入時,程式碼在記憶體中的位置是不固... Read more 22 Jul 2017 - less than 1 minute read
就是線性內插,很直觀。 結果 平行: 放射狀: Before: After: Before: After: ZJ 題目傳送門 漸層色彩 主要程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 #ifndef __INCLUDE_L... Read more 22 Jul 2017 - 1 minute read
這次來實作一下上上學期多媒體技術導論, 聽過的 Seam Carving 方法吧。 Seam Carving 簡單來說,就是在影像中,由上到下(或左到右),找到一條能量總和最小的路徑,然後把它刪掉, 刪掉一次,影像寬度(或高度)會少 1 ,以此達到影像縮放的功能,這種方法不會太大影響影像中的物件比例。 為什麼這種方法比較不會影響影像中的物件比例呢?因為像素是用「移除」的,並且能量(梯度)較低的像素,比較不會出現在邊緣上,我們也比較難查覺出,有些像素被移除了。 考慮到計算複雜度問題,要一次找出 n 條不重疊、能量加總最小的路徑太花時間, 只好採用一點 greedy 的策略,每次只刪去目前能量最小的 1 個路徑,做 n 回合,來達成圖片縮放的功能。 要算出一條能量總和最小的路... Read more 21 Jul 2017 - 4 minute read