github:
https://github.com/kotomineshiki/MultiMediaHomework
問題1
算法描述:
讀入兩張圖片
混合圖片=圖片1
For 圓形半徑 小於 對角線長度
Foreach
像素 in 混合圖片
If 該像素在圓形區域內
混合圖片圓形半徑內某位置的像素=圖片2該位置上的像素
半徑擴大
關閉圖片窗口
輔助函數函數:輸入矩陣上某個座標,判斷該座標是否位於圓形區域內
優化1 按照以上算法,對於已經在圈內的像素點,會被重複判斷是否在圓形區域內,這樣會帶來無用的性能消耗。
作爲優化的算法,只用判斷由於半徑擴大所帶來的“新”的圓環部分的像素點即可
程序實現:
語言及庫:python3.7 cv2庫
(未優化版本)
實現效果
問題2
算法描述:
這是一個LUT算法
本次作業採用二叉遞歸樹的方法
步驟爲:
-
按照紅綠藍的次序劃分八次,得到256個塊
-
每個塊計算其中心顏色
-
把原顏色替換成中心顏色
-
得到新位碼(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