2020年1月12日 星期日

06360321 鄭子輿 HW5

YUV色彩模型與色彩轉換
YUV色彩模型:Y為亮度,U、V為彩度,因為人的眼睛對於亮度較為敏感,彩度較不敏感,因此可以減少對彩度的取樣,達到省空間的效果。

界面總攬
Y:使用者字定義UV平面亮度
Set new Y in YUV palette:用當前亮度值重新畫UV平面
Before conversion image:轉換前的影像
Origin image:最原始的影像


YUV palette

利用整數轉換公式將YUV palette的值轉換成RGB畫在圖片相對應的位置上
公式如下
clip是自己寫的函數,為了預防轉換公式後色彩值超出0~255的範圍,所以要將超出的色彩值定義在範圍內。

下面分別為亮度0、亮度128、亮度255的UV平面



色彩轉換:將原始影像RGB轉換成亮度+palette內點選的UV彩度=色彩轉換後的影像。

RGB轉亮度的公式
原始影像

各種色彩轉換後的影像



心得:測試過程中發現先使用其他功能調整完影像後再使用色彩轉換會將最原始的影像做轉換,而其他功能的效果就消失了,因此需判斷在進入色彩轉換頁面時複製當前圖片,進行色彩轉換時拷貝當前圖片再轉換,判斷方法如下
CopyImage()是自己寫的函數。


魔術棒有bug,所以無法po上來了QQ,以下是自己研究繪製簡單圖形的部分,不算加分,純分享。
Canvas繪圖
下圖為圓形+正13邊形+正13角星的圖形
在Canvas上繪製圓形+正N邊形+正N角星方法:

圓形參數式
X = A + R * cos( θ )
Y = B + R * sin( θ )

(A,B)為圓心偏移原點(0,0)位置
R為圓半徑
0 <= θ < 360

利用上面圓形參數式即可化出圓形
程式碼:


正N邊形+正N角星
作法:得出其中一條直線參數式之後再使用旋轉矩陣劃出每一個邊。

θ = 360 / N
假設O為圓心

上圖左邊公式為正N邊形其中一個邊的直線參數式
AB線段為正N邊形其中一條直線
OA線段與OB線段間角度為θ

上圖右邊公式為正N角星的其中一個邊的直線參數式
AC線段為正N角星其中一條直線
OA線段與OC線段間角度為2*θ

個別求出參數式之後再使用旋轉矩陣將其他直線畫出來
旋轉矩陣公式:
程式碼:

沒有留言:

張貼留言