2014年12月31日 星期三

00360416 周棟彥 HW02


此次作業主要是先分析圖中RGB的個數,之後利用畫筆畫出CDF與PDF的值

開啟圖片

執行CDF結果


執行PDF結果


本次作業心得:
本次作業中比較難的部份應該是在找出圖片中RGB的值並將其存到陣列之中,找到後就可以利用畫筆將其值畫出。


學到的東西:
計算圖片中RGB的值
畫出CDF圖
劃出PDF圖
圖片的開啟

程式碼(內有註解):https://www.dropbox.com/s/nfnlvkh1orfczpf/%E5%BD%B1%E5%83%8F%E8%99%95%E7%90%86_HW2%E7%A8%8B%E5%BC%8F%E7%A2%BC.txt?dl=0


2014年12月30日 星期二

資工三甲 01363116 彭宇壕 HW3

Level and Curve


Level:此功能能改變圖片的亮度及對比,輸入四個數值 
InputMax,InputMin,OutputMax,OutputMin
當四個數值有變動就重新畫圖顯示
iOutput = iOutputMin + (iInput - iInputMin) * ((iOutputMax - iOutputMin)/(iInputMax - iInputMin));




-------------------------------------------------------------------------------------------------------------


Curve:一樣也是處理圖片的亮度和對比,和Level不同的是Level是給定一定範圍,利用四個數值
計算並畫出圖來,而Curve是在曲線上點一點,利用曲線公式帶入一點計算後畫出的圖








2014年12月28日 星期日

資工三乙 01360476 石皓宇 HW3

作業三    先附上程式碼 :
 https://www.dropbox.com/s/ruvk7rj69tkvd2n/hw3_Unit.cpp?dl=0

        在做這作業的時候,我把Level跟Curve介面設計在一起以便操作,在Level界面可以手動輸入輸入及輸出的上界及下界值,按下"apply"便會在"修改後"旁的image框中顯示出修改後的圖片,
輸出公式如下:
myOutput = myOutputMin + (myInput - myInputMin) * ((myOutputMax - myOutputMin)/(myInputMax - myInputMin));

(a) 以Level調整完色階的結果

        接下來是Curve介面,用Image3MouseDown()方法取得Image3的X,Y值,經由運算結果,用if判斷式,如果curve[i]大於255就給255,小於0就給0,最後把圖同樣繪在"修改後"的Image框裡.

(b) 用Curve調整使圖片便亮

(c) 用Curve調整使圖片便暗

        這次的作業不算太難,參照公式後再努力一下就寫出來囉!還沒寫的同學趕快動手做囉!

2014年12月25日 星期四

資工三乙_01360221_陳鈺培_HW3

此次作業是使用Level和Curve

如何生出曲線和判定真的對自己是一大挑戰
看著原圖片隨著這些發生變化真的很好玩
但如果沒有老師的講解真的會更困難
主要還是願意親自動腦吧

原圖片


 將圖片放入


 調整變亮


調整變暗

程式碼:https://www.dropbox.com/s/iibkmd24a4pvlpo/10741130_890299157655833_177389456_n.cpp?dl=0

01360955 魏智信 HW2

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

2014年12月22日 星期一

01360531_HW2

https://www.dropbox.com/s/e5foh6dwm8pz8vq/Unit1.cpp?dl=0
這個作業最困難的部分在於抓到圖片的像素BGR
其他的還有覺得應該很多的顏色卻顯示不多感到有點詭異

2014年12月18日 星期四

Spatial Filtering 實作

HW4:Spatial Filtering

這次的作業是有關模糊化(blur),
銳化(Sharpen),胡椒鹽雜訊(Pepper-and-salt Noise),
中值濾波器(Median Filter)的實作。


這是程式的界面
有兩個Page,第一個Page為Image顯示原圖
第二個Page為Result顯示處理后的結果圖
程序有5個功能(如下圖所示)
1.box blur(快速均值模糊)             
2.Gaussian Blur(高斯模糊)          
3.Sharpen(銳化)                          
4.Sharpen Diagonal(對角戲銳化)
5.Median Filter(中值濾波器)        


一:
第一個是box blur(快速均值模糊)
其做法是將影像中每個像素點的值更改為
其周圍九宮格內像素的平均值


這裡要注意的是邊界不能取到
for (j=1; j<iImageHeight-1; j++)
所以是從1到imageheight-1做scanline
做完box blur的結果(如下圖)


二:
第二個是Gaussian Blur(高斯模糊)
高斯模糊是一種圖像模糊濾波器,它用正態分布
計算圖像中每個像素的變換。
可以理解為加了權重的box blur
它更加注重臨近的點對中間那點的影響


做完box blur的結果(如下圖)


三:
第三個是Sharpen(銳化)
銳化用到了Laplacian(拉普拉斯)運算子
將銳化濾波器的公式簡化可得
 g(x,y)=f(x,y)-∇^2 f(x,y)
=f(x,y)-[f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)]
=5f(x,y)-f(x+1,y)-f(x-1,y)-f(x,y+1)-f(x,y-1)
簡化后的銳化濾波器的遮罩(如下)


左邊為只對橫向和縱向做銳化
右邊還加入了對角線的銳化

在做銳化的時候要注意色彩值可能超過255或小於0的問題
沒有做攔截的話可能出現(如下圖)的錯誤


int f=(5*a[4]-a[1]-a[3]-a[5]-a[7])
if(f>255)f=255;

else if(f<0)f=0;
所以這段很重要!
正確結果(如下):


可以發現整個畫面變得更清晰了。

四:
第四個是Sharpen Diagonal(對角戲銳化)
這個與三的區別在對角戲也做了銳化
結果(如下):


可以發現銳化效果相比于三更加明顯。

五:
第五個是Median Filter(中值濾波器)
中值濾波器常可用來消除脈衝雜訊
所以在用這個濾波器之前要先做
胡椒鹽雜訊(Pepper-and-salt Noise)這個動作
影像中的脈衝雜訊是以白點或黑點的形式出現,
所以胡椒鹽雜訊就是用亂數將影像的
某些像素點的色彩值改成黑白色
從而產生胡椒鹽的雜訊效果。
結果如下(這是6%的胡椒鹽):


撒完鹽之後就需要用到中值濾波器來處理了。

中值濾波器是將九宮格內的色彩值,


取出來之後排序,

之後拿取中間值


(這裡引用 99360134 徐賢傑 學長的圖來做說明)

中值濾波器處理后的結果(如下):


看起來會比之前影像模糊一點點

如果是10%的胡椒鹽就還會殘留一些雜訊


總結:這次的作業寫完后很有感覺,不僅模擬了photoshop的功能
還實作了影像的修復與處理。在撒完鹽后又用中值濾波器
將圖像復原的過程很有成就感。還有就是再老師指點完
將銳化的bug處理掉之後,得到了真正銳化的結果。
那個時候有興奮的感覺!
總而言之,這次的實作讓我對影像處理更加感興趣了!







 

2014年12月17日 星期三

99360303 吳泓霖 HW4


讀取好的原圖
使用平滑濾波器(有權重)後
加入胡椒鹽雜訊
接著使用中值濾波器
最後再使用銳化濾波器

在銳化濾波器以前都非常簡單但是也很繁瑣
如果使用最簡單的方法的話
4個角落以及4個邊都會沒有效果
所以特別用了很多的if, else if, else去run那些特殊地方

中值濾波器因為是"中值"
而4邊和4角都沒有所謂的中值
所以是感覺上最簡單的

胡椒鹽有動了些手腳
輸入基數其實是用+1後的數值下去做運算
不會有小數點的問題

在銳化濾波器的地方遇上了蠻蠢的問題
但是因為不清楚原因所以一直改程式碼
最後請教了老師才知道只是簡單的要設範圍
讓最後結果最低是0   最高是255就沒事了


資工三乙 01360353 高子翔 HW3

程式碼:

https://www.dropbox.com/s/4robzxpgwzl88t7/Unit1.cpp?dl=0

心得:

在寫程式的一開始不太清楚怎麼寫
然後之後就問朋友跟看講義慢慢研究
這次比較困難的點就是做曲線的時候
曲線如何判定跟移動
目前也還在改善

實作: