寫了半天,瀏覽器崩潰……心好累……不拉家常了這次……
我是Git地址
問題描述
想要把大量的源圖片,使用一定的排序,生成一張新的圖片,使之儘可能類似一張給定的目標圖片:
目標圖片:
生成結果:
問題分析
- 把一個區域(目標圖片)分割成若干個馬賽克區域
- (過度設計)將一系列的給定的size放入目標區域,嘗試是否能放入。關鍵:使用迭代代替遞歸。(事實上簡簡單單的單一size就夠用了……)
- TODO:或許可以切分成圓形之類的,不過不知道接下來步驟怎麼做
- 把目標圖片按照分割區域進行切分,分析每個區域的顏色信息
- 關鍵:分析RGB值
- 加載和處理源圖片,獲得源圖片的信息
- 關鍵:進行適當的索引,防止每次使用時都重新加載大量圖片
- 將源圖片放入目標圖片的各個區域,得到結果
- 關鍵:使用八叉樹對源圖片的顏色進行緩存索引,從而快速對每個目標馬賽克區域查找適合的源圖片
- TODO:應當對RGB通道採取不同的權重比較好
- TODO:圖像邊緣過於銳利。已做了的線性誤差累積,貌似沒有太大效果
其他想法TODO:
1. 適當修改源圖片的亮度、色調
2. 將源圖片更細的切分成2x2(或更小)的子塊,分析該2x2矩陣,從而獲得更好的分辨率
代碼列表
- image_joint_common.py
- 通用向量類
- 八叉樹及其查找
- image_joint_imgloader.py
- 加載源圖片,生成緩存圖片(速度慢)
- 加載緩存圖片(速度快)
- 統計圖片信息,生成“源圖片顏色列表”和“源圖片大小數量列表”
- (debug測試用main_test())生成緩存:
- image_joint_slice.py
- 輸入“源圖片大小數量列表”,得到“目標切塊列表”
- (debug測試用main_test())支持單步輸出:
(按任意鍵增加色塊)
- image_joint_mosaic.py
- 按照“目標切塊列表”,把“源顏色列表”放入目標切塊
- (debug測試用main_test())自己生成顏色列表的測試:
(這裏是隨機生成的顏色)
- image_joint_main.py
- 加載以上四個模塊,獲得最終結果