多媒體技術作業-圖片特效和median cut算法

github:
https://github.com/kotomineshiki/MultiMediaHomework

問題1

算法描述:

讀入兩張圖片

混合圖片=圖片1

For 圓形半徑 小於 對角線長度

   Foreach

像素 in 混合圖片

          If 該像素在圓形區域內

混合圖片圓形半徑內某位置的像素=圖片2該位置上的像素

   半徑擴大

關閉圖片窗口

輔助函數函數:輸入矩陣上某個座標,判斷該座標是否位於圓形區域內

優化1 按照以上算法,對於已經在圈內的像素點,會被重複判斷是否在圓形區域內,這樣會帶來無用的性能消耗。
作爲優化的算法,只用判斷由於半徑擴大所帶來的“新”的圓環部分的像素點即可

程序實現:

語言及庫:python3.7 cv2庫

(未優化版本)

實現效果

問題2

算法描述:

這是一個LUT算法

本次作業採用二叉遞歸樹的方法

步驟爲:

  1. 按照紅綠藍的次序劃分八次,得到256個塊

  2. 每個塊計算其中心顏色

  3. 把原顏色替換成中心顏色

  4. 得到新位碼(8bit)和顏色的對應表

優化1. 如果隨機取中心顏色會造成黑點,所以採用平均值的方法

優化2. 只用優化1導致一些方塊邊緣的顏色出現突變,可以採用計算歐拉距離取最小的方法減少突變

計算優化:

遞歸部分僞代碼

#傳入塊 和 上一層次賦予的值

#if depth==8 計算結果保存並輸出

else{ 先序遍歷 進行下一層遞歸

先給塊內所有的顏色附上位值

#求中值

#左子樹(小塊和0,depth++)

#右子樹(大塊和1,depth++)

Briefly explain: 因爲比起藍色,人類對紅色更加敏感

程序實現:

使用庫cv2,python3.7 JetBrainspycharm

實現效果:

7bit調色板(未優化)

8bit調色板(未優化)

7bit調色板(優化)

8bit調色板(優化)

色碼(8bit:rgbrgbrg)對應RGB顏色

說明:第一位無意義,必定是0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章