2020年1月2日 星期四

06360293 楊哲銓 HW3

色階調整

色階調整將原圖的R、G、B值依比例做範圍調整,改變圖片中顏色的飽和度。

線性調整

在這邊不先讀取圖片中的像素,因為每種顏色可能重複出現,若每個像素都計算一次可能導致計算量太大、程式運行過久。
因此這邊先執行線性轉換,轉換前範圍為old_left~old_right、轉換目標範圍為new_left~new_right。
圖中newPixel為一大小為256的陣列,因R、G、B範圍皆為0~255,因此不需要分別為三色做轉換,只需要將原始範圍轉換成新範圍即可以應用在R、G、B三色。


圖中公式


將input在原範圍中做比例計算,將計算出的比例移至新範圍,使用同比例求出output。

例如要將0~255中的10轉換為20~200的範圍,將範圍帶入公式中:


計算出10在0~255中佔了多少比例,依同比例在20~200中求出新的output作為轉換值。



上圖為將0~255轉換為128~255的結果示範,圖片整體顏色飽和度上升、圖片整體變亮。



圖中X軸為原數值、Y軸為轉換後數值,顯示將0~255轉換為128~255的線性轉換圖表。


曲線調整

與線性調整的方法相同,先將0~255轉換為新的值,再分別應用在R、G、B三色。
這邊實作曲線調整的前提為範圍必須0~255,並給定一值(如:(100, 150),表100轉換後會變成150)。
有了(0, 0)、(x, y)、(255,255)三個點,可以依數學方法求出經過此三點的曲線函數。

曲線公式:

分別將(0, 0)、(x, y)、(255,255)帶入可以求得a、b、c三值,得到一完整曲線方程式。


上圖為將(0, 0)、(100, 150)、(255,255)帶入的結果示範。



圖中X軸為原數值、Y軸為轉換後數值,顯示經過(0, 0)、(100, 150)、(255,255)三點的曲線轉換圖表。

結論

色階轉換主要是針對圖片的飽和度做調整,若圖片本身對比度就不足,則就算提升了飽和度,圖片依舊不清晰。

如下圖所示:

上方結果的線性轉換圖表:

06360984 翁明緯 HW2

影像直方圖與直方圖均化

今天要來新增的功能是直方圖與直方圖均化
直方圖是用來進行統計,而且可以非常清楚的看出他的分布狀況。

影像直方圖就是對於影像的色彩值進行統計。
我們進行實作的方式是將影像圖均化
今天要來新增的功能是直方圖與直方圖均化
直方圖是用來進行統計,而且可以非常清楚的看出他的分布狀況。

影像直方圖就是對於影像的色彩值進行統計。
我們進行實作的方式是將影像一行一行掃瞄並統計如下圖
我實作直方圖後的結果是這樣
有了直方圖後可以知道其色彩值的分布情況,例如直方圖均化。
直方圖均化是把集中在某個區的色彩值利用機率密度函數(PDF)將他們平均分配
這是均化的前後對比
這算是第一個實作作業,做完之後讓我很有成就感也非常驚艷!雖然Debug很久,Bug是沒有把陣列宣告為浮點數,但最後能夠把一張黑漆漆看不見的照片變成清楚看見一隻鳥,讓我對這堂課的興趣增添不少。




06361155 馬叡竣 HW3


色階以及曲線調整

色階調整:
我們將原本色彩範圍為(0~255)的圖片保持色度比例並將範圍縮小為(100~200)
圖一

圖二




如上圖所示(圖一為調整前,圖二為調整過後)
色階調整能夠將色彩範圍設定成使用者所需要的範圍
以下為色階調整公式:




色階曲線調整功能:

透過調整輸出的函數來調整影像色階
在調整前函數圖形呈現對角線


調整前的影像

在一開始,我們先將新的座標設定為X:152 Y:102
也就是將X在152的亮度  從原本的152降到了102
而旁邊的值也會隨之改變。
*距離調整點越遠變化越小*



調整後的影像

2020年1月1日 星期三

06360293 楊哲銓 HW2

影像像素概念、直方圖、直方圖均化

全彩影像,紅色、綠色、藍色各有256種,因此總共可以呈現224種。
此作業使用C++ Builder實作對BMP影像中的RGB值做調整修改。


像素

BMP檔案中,每一個像素儲存了R、G、B三原色的值來決定此像素呈現的顏色。
例如:RGB(255, 0, 0) 為純紅色、 RGB(255, 255, 0) 為黃色等。



負片效果

負片效果,顧名思義是將像素中的RGB數值反轉,得到類似底片的圖片。


Byte* bPtrImageRow = (Byte*)Image_Box->Picture->Bitmap->ScanLine[j];
先將BMP中每一行的開頭指標存入bPtrImageRow,再由迴圈處理行中的每個像素。
由於每個像素中存了R、G、B三個數值,因此bPtrImageRow指向的陣列長度會是圖片寬度的3倍。
但這裡仍由「像素」為單位做考慮,並在每個像素中使用for迴圈處理R、G、B三值。
對每個像素中的R、G、B做反轉(255 - 原始值),即所有像素皆會變成原本顏色的補色。



灰階

當R、G、B三值皆相同時,該像素顏色會呈現灰色。
在這邊的做法是將R、G、B三值皆填入平均值,這樣可以保留與其他像素的顏色差異,並將顏色換成灰色。


相同地,先將BMP中每一行的開頭指標存入bPtrImageRow,再由迴圈處理行中的每個像素。
對像素中的R、G、B取平均後,將R、G、B三值皆換成平均值即可得到灰階化的效果。



顏色遮罩

類似使用玻璃紙眼鏡看圖片的效果。
在這邊實作了純紅色、純綠色、純藍色的三原色顏色濾鏡。

概念很簡單,以紅色遮罩為例,將所有像素中只留下R值,G、B皆設為零,即得到紅色遮罩的效果。
※C++ Builder中,並不以RGB的順序來儲存顏色資料,反而是以BGR的反向順序來儲存,因此圖中k!=2代表著當像該位置儲存的不是R值時,設為0。

直方圖

直方圖,將圖片的R、G、B統計後以圖表方式呈現。

開三個大小為256的陣列分別代表R:0~255、G:0~255、B:0~255的個數,並將圖片跑過一次做統計。



這邊將統計資料放入C++ Builder自帶的TChart圖表物件中來顯示。




直方圖均化

對於過暗的圖片來說,R、G、B值皆集中在數值較小的位置,使用直方圖均化將所有顏色平均分布至0~255,使得圖片暗部加亮,可見度增加。
同樣地,對於過亮的圖片來說,R、G、B值皆集中在數值較大的位置,使用直方圖均化將所有顏色平均分布至0~255,使得圖片亮部變暗,可見度亦增加。

06360426 鍾誌杰 HW2

一張圖片是由很多個的像素(Pixel)組成的,而一個像素則是由RGB組成,分別代表紅、綠、藍三色的強度。當像素的大小為24位元時,能夠呈現224種不同的顏色,稱之為全彩影像。
而大小為24位元的像素的RGB分別使用了8個位元,代表每個像素的RGB值界於0-255之間,值越高代表該色強度越大。

反轉色彩值

反轉圖片的色彩值,只要將255分別減去像素中RGB的值即可,呈現出來的色彩即是原本色彩的互補色。

灰階影像

灰階影像是指影像由很多個灰色色階的色彩所組成的,灰色色階中的顏色,其像素中的RGB值皆相同。要將一張圖片簡單的轉成灰階影像,只需要將各個像素中RGB的值相加後除3,做為新的RGB值即可。

影像色彩直方圖

影像色彩直方圖就是統計中的PDF,就是對每個像素點的RGB值的出現次數分別做統計,接著將色彩值出現次數的分布情形用直方圖呈現出來,拿科米蛙舉例:

橫軸為色彩值(0-255) 縱軸為色彩值出現次數

直方圖均化

直方圖均化用來調整影像的對比度,做法是將圖片的色彩值轉換成該色彩值的CDF乘上255,因此我們要利用上面的PDF幫助我們找出CDF啦,知道色彩值的CDF後就可以對圖片做直方圖均化了。

直方圖均化很適合運用在對比度不足的圖片上,處理過後讓圖片更清晰。

在查閱RGB色彩值的相關資料時,得知像素的大小空間決定了每個像素點可以呈現多少種顏色,因此圖片的顏色的豐富程度會隨著像素空間的大小而改變。而RGB色彩值0-255則是代表該色彩的強度,值越低則強度越小,這也解釋了為什麼所有色彩的色彩值為0時,在色階圖上的呈現顏色都是黑色了。

06360312 林為榮 HW4

平滑&中值&銳化濾波器

(這是原圖)

平滑濾波器是對於一個像素格,包含本身內的九宮格像素(八方位+本身),加起來做平均或是給予權重。
(皆對當下格子作更動,其他格不受影響)

 
此圖為平滑化結果,多按了幾次以作分辨,在這裡我以平均來示範
中值濾波器則是對於一個像素格,包含本身內的九宮格(八方位+本身)的值,作排序後取中位數取代該格。
(皆對當下格子作更動,其他格不受影響)
中值濾波器通常用於圖像有雜訊,俗稱胡椒鹽(如下圖),再下張則是用中值濾波器後的成果
 
銳化濾波器則是對於一個像素格,強調中央的像素。
以左圖作例子,其公式如下:
g(x,y)=5f(x,y)-f(x+1,y)-f(x-1,y)-f(x,y+1)-f(x,y-1)
g(x,y)為新的像素值,要對當前像素格作更改,f(x,y)為原像素,自身五倍減去上、下、左、右一倍。

(皆對當下格子作更動,其他格不受影響)

 

結果如下圖,經過銳化濾波器2次後的結果(方便辨識)

心得:在做這個作業的時候有稍稍卡住,起初不知道要用一個新的空間先儲存值然後再代回來,導致整個結果不正確,在詢問同學之後才知道,知道了之後就很輕鬆,很快就把三個都做出來了。