顯示具有 01360955 魏智信 標籤的文章。 顯示所有文章
顯示具有 01360955 魏智信 標籤的文章。 顯示所有文章

2015年1月18日 星期日

01360955 魏智信 HW3

作業:色階調整 與 曲線調整

程式碼網址:
https://www.dropbox.com/s/zaaejyhjf6j1l57/Curve.cpp?dl=0

此次作業的作法,我是先宣告一個ColorTable[256],裡邊是存放輸出的色階值,並按照使用者輸入或操作,來改變對應的輸出值。

並使用ColorTable來 輸出程式上的Curve圖或是要改變的圖片

User Change ----------> ColorTable ----------> Output Curve Image
                                                                |
                                                                |------> Output File Image

最大值最小值問題:
只要大於最大值則設為最大值
小於最小值則設為最小值


此圖是色階最大值最小值輸入後,
紅色: 輸入值 = 50-200
藍色: 輸出值 = 20-230

折線圖是經由ColorTable產生出來
因此僅需要去查ColorTable[輸入值] = 輸出值
就可以快速對應到要調整的值。


此圖為調整後,
可以看的出來天空的色彩有點像雲彩紙,有些粗糙
是因為像素的色彩值域縮小的緣故(輸入值),有些像是全彩(32bit) --->高彩(16bit)

而二次曲線調整,
主要影響色彩的灰度與亮度

程式的部分僅需使用二次函數 y = ax^2 + bx + c
求得a、b,並以輸入值 x,輸出值 y 改變ColorTable的值。

再將ColorTable的色彩值對應到圖片上。


原圖與調整後的對比


高量與低量的對比






01360955 魏智信 HW4

作業:中值濾波器 及胡椒鹽雜訊 加平滑與銳化濾波器

程式碼網址:

這個作業主要用到矩陣的相乘相加,較難的部分就是Scanline的上層下層問題。


















上圖是中值濾波器的結果

中值濾波器是要將最近的九格像素RGB分別找出中位數,並取代正中央的像素值。
由於往下跑Scanline時,上層的Scanline已經被修改,這並不是我們所要的值,必須要保留上層的資料。

當找到九個值後,依順序排列,即可找到中間的值。

也因為RGB的範圍是0-255,0跟255很容易排除在中間值之外
所以在胡椒鹽雜訊下,能去除不少胡椒,不過當無法排除的胡椒,也會有凝聚的現象。


上圖是5%的白胡椒+5%的黑胡椒


上圖是胡椒鹽後使用中值濾波器的結果
可以看的出來城市的樣貌,且沒有胡椒鹽的雜訊。


上圖則是15%的白胡椒+15%黑胡椒,並使用中值濾波器的結果
可以看出樣貌有些扭曲變形,雖然清除掉不少胡椒,但是也出現了大黑塊大白塊。


上圖是使用平滑濾波器的結果


上圖是使用稅化濾波器的結果




2015年1月17日 星期六

01360955 魏智信 HW5

作業:YUV 色彩模型 & RGB 雙色模型

程式碼網址:
https://www.dropbox.com/s/tuzv4jrvhj2m8hw/ColorModel.cpp?dl=0

此次作業主要是做RGBtoYUV以及YUVtoRGB的色彩值轉換
為什麼要轉換成YUV呢?

Y = 亮度
UV = 彩度
如果想改變圖片色彩,使用RGB模型每會因為三種色彩資訊裡包含灰階而很容易修改到亮度。
因此才採用YUV模型,維持原本色彩的亮度Y,並修改想要的色彩值UV。

p.s. RGB灰階值 = R+G+B/3


















此圖為YUV模型色彩,{Y=128, U=0-255, V=0-255}並轉換為RGB輸出

下方為轉換公式:


[{ 1, -0.00093,  1.401687}, [ Y-0, [ R,
 { 1, -0.3437,  -0.71417 }, X U-128, = G,
 { 1,  1.77216,  0.00099 }] V-128 ] B ]


YUV轉換成RGB色彩值輸出值須介於0-255
故大於255則設為255、小於0則設為0


















此圖為選擇模型顏色轉換後結果

選色的方法:

TColor SelectedColor = this->ImageModelYUV->Picture->Bitmap->Canvas->Pixels[X][Y];
this->ImageSelected->Canvas->Brush->Color = SelectedColor;
this->ImageSelected->Canvas->FillRect(Rect(0,0,ImageSelected->Width,ImageSelected->Height));


到Bitmap->Canvas->Pixel[X][Y],Pixel回傳值為TColor,因此宣告一個TColor存放顏色
並填滿一個Image就可以知道選到什麼顏色了。

為了將圖形轉換成想要的圖片色彩又不失亮度的資訊

1.將圖片Pixel的RGB轉換成YUV => 可以得到Pixel的亮度Y(這個值是我們要保留的)
2.將選擇的色彩RGB轉換成YUV => 可以得到色彩的彩度UV,取代步驟1.的UV即可
3.將YUV( Y=步驟1.的Y, U=步驟2.的U, V=步驟2.的V )轉換成RGB,在輸出到Image元件就完成了。

上三個步驟去對圖片每個Pixel重複做,就可以只輸出單一色調了。


   { Y = 255, U = 0-255, V = 0-255 }                             { R = 0-255, G = 0-255, B =0 }















{ R = 0, G = 0-255, B = 0-255 }
                                                                                   { R = 0-255, G = 0, B =0-255 }



2014年12月25日 星期四

01360955 魏智信 HW2

 
作業:Histogram
 
程式碼網址:
 
此次作業主要用是對 Bitmap 的每一 Pixel 作色彩值分佈計算
 
而比較麻煩的是繪出色彩的分佈圖形
主要用到 Canvas、Pen、MoveTo、LineTo 等函數和物件
 
下兩張圖是第一次成功輸出後的結果:
 
 
 
 
 
 
而後我嘗試著把三張圖合併,不外乎就是把 RGB 三色做 OR 運算即可
 
以下是 RGB 三色結果:
 
 
 
 
 

2014年10月8日 星期三

01360955 魏智信 HW1

 
 

相信許多HTC M8的朋友,都一定玩過3D的特效功能,
 
那M8的3D特效是如何產生的?




其實是因為雙鏡頭的加持阿!!!
HTC M8的副鏡頭是用來記錄影像的深度,再與原圖做配合,
而達到看起來凹凸有致的感覺。
 
 
下圖是一個很有趣的3D"震盪圖",說穿了只不過是gif的連續動圖。

 
是透過一個小小的軟體"手工"製成的,雖然沒M8如此強悍就是。
 
名稱:チクワしか持ってねえ(日)
TIKUWA(英)
 
 
方法是將喜歡的圖載入,並開始畫畫(小畫家模式OPEN!)
紅色<---------------------------------------------------------------->紫色
圖片較近(凸出)的地方-----------------------------圖片較深(凹入)的地方
黑色(背景):不震動
 
註:Ctrl+z 回上一步驟(經常畫到撇出去可用)
 
 
畫完大概像這樣,因為圖片本身沒有"深度"的資訊,
所以才要如此搞工(台語)!
 
接著只要從左上角的主選單去生成GIF檔就完成了!
可以選擇上下震動還是左右震動都可以。