2012年11月26日 星期一

99360781 王鈺

介面
這次作業的介面,將這張原圖做了胡椒鹽,
中值濾波和平滑還有銳化的處理,把影像用不同的方式呈現出來

原圖

灑上胡椒鹽

中值濾波
將原圖加上了雜訊的效果,就像是在圖片上灑上了胡椒鹽,
再利用中值濾波器,
這些何教研究不見了,而圖片變得比較模糊一點,
和原圖比較起來顏色變得比較柔和

平滑處理
經過了平滑處理,圖片變得模糊了,將周圍的pixel值平均後存入該點,
所以圖片變得模糊,使的兩個顏色之間變得很相近,
界線也比較不明顯

銳化
經過銳化處理後,發現邊邊都變得比較銳利,和平滑處理有對比,
將線條兩邊顏色對比,將深的顏色加深而淺的顏色更淺,使圖片的銳化
更明顯

這次的作業花了很久的時間才完成,大部分都請教同學和自己了解程式碼,
才能順利完成這次的作業,雖然上課有聽
但要將這些東西轉換成程式碼對我來說
有點困難,所以還是要經過同學的指導,但搞懂後感覺沒想像中的難,
這次的作業又讓我學到影像處理的一些方法,
中值濾波和平滑還有銳化的處理,又讓我學到怎麼處理相片,可以將相片改變成許多種風格,讓這些影像變得有趣,以後也可已將自己拍的相片做修改

99360090 王昶胤 HW03

這是我這次作業的介面圖
其中程式方面做了胡椒鹽、中直濾波、平滑和銳化
處理方面的結果則以image元件呈現出來

(1)加入胡椒鹽後,利用中值濾波器濾除雜訊
 
這是原始圖片image,圖片將加入胡椒鹽雜訊後,在利用
中值濾波將胡椒鹽雜訊濾除掉

這是一張加入6%雜訊後圖片呈現效果

利用中值濾波將雜訊濾除後,呈現出來與原圖相較下,圖片似乎有些許的模糊化
有相較於平滑之效果

(2)將圖片做出平滑效果

這是原始圖片image,圖片將利用平滑濾波器做出平滑的效果

像素值利用周圍像素值平均後來做處理,與濾波不同點在
於,平滑而來自於統計,整張圖片比較銳利的菱角上似乎
有些許的圓潤,圖片較原圖模糊化,做出較柔的效果

(3)銳化效果
 
 這是原始圖片image,圖片將利用銳化濾波器做出銳化的效果


利用每個Pixel乘5倍減去上下左右Pixel的色彩值呈現
銳化濾波器將圖片呈現得更有立體感,把菱角較模糊的方面做
出了更加有尖銳感,使得圖片看起來比較精緻感

心得:

在這次作業當中,雖然撰寫程式碼並不難,但與同學討論的時間比實做的時間久,
因為程式碼雖然都打好了,但在結果方面出現了與正確結果不同,所以在debug方
面卻是花了非常多的時間,但這次作業讓我有更瞭解影像出理方面的一些技巧,老
師說得很對,每天練習程式是必須的,久沒碰程式真的遇到了很多的問題,之前學
過的印象都有些模糊了,在這次撰寫程式上,確實讓我回溫了程式碼的撰寫,在這
次的教訓下,讓我領悟到學習不只是精進,重要的是在複習

99361130 莊鈞凱 HW3

(圖一)程式介面

        這次作業的呈現 ,把功能鍵分類後放到上方的MainMenu裡 ,將處理結果置於PageControl中 ,並拉入兩個Image元件 ,方便比較處理結果.

        第一個探討的是中值濾波器 ,將像素值以鄰近像素值排列後的中值填入 ,理論上當該序列出現過大或過小的值時 ,會因為這樣的處理而過濾掉 ,以下貼出實驗結果.

(圖二)原圖

(圖三)加入9%胡椒鹽

(圖四)中值濾波

       我們將原圖加入胡椒鹽來呈現圖片雜訊的效果 如(圖三) ,經過中值濾波器的處理之後胡椒鹽消失了 如(圖四) ,但將(圖四)與原圖做比較 ,發現原圖經過中值濾波之後變得不太一樣 ,像是水彩畫一般 ,上網搜尋之後得知影像處理上的水彩畫效果確是要經過中值濾波的處理(參考http://blog.csdn.net/luckyboy101/article/details/7858995)

        接著探討平滑濾波器 ,將像素值填入周圍像素的平均值 ,也就是說每個像素值會參考周圍像素的值來做處理 ,在程式的撰寫上 ,是將包括自己及其周圍的八個像素點捉出計算平均後再填入該點 ,以下來看看處理的效果.

(圖五)原圖

(圖六)平滑化處理

        由於心中有了預期 ,所以這次的實驗特別找了岩石這樣有稜有角的圖片 ,可以看出石頭尖銳的線條沒有那麼明顯了 ,說白了點 ,感覺整張圖片"糊"掉了 ,因為每個像素與周圍像素去做計算 ,可以想像在圖片呈現出來的"界線"的感受會變得不明顯 ,而實驗結果也確實如此.

        最後來探討銳化濾波器 ,從字面上不難感受到是使圖片銳利化 ,以下貼出實驗結果.

(圖七)原圖
(圖八)銳化處理

        (圖七)的原圖經過銳化處理 ,可以發現原本柔和的雲海輪廓更加的清楚 ,連遠模糊的山也清晰多了 ,感覺很像平滑化相反的處理 ,這樣的濾波器在圖片模糊或是邊緣不清楚的情況下使用可以得到很好的效果.

        以上三種濾波器 ,經由實際實驗來得到直接的經驗 ,比一字一句從書本上學習來得有效多了 ,藉由撰寫程式 ,直接改變像素值來了解影像處理的原理真的受益良多 ,對於程式撰寫能力也精進了許多.




2012年11月23日 星期五

HW3 99360081 莊怡均

原圖

錯誤的胡椒鹽

一開始在要產生胡椒鹽的時候,沒有考慮到記憶體中BGR為每三個為一組的像素點,所以 j 並沒有乘上三倍只有加上k值,就導致上圖的出現,胡椒鹽就只有集中在左側。 

對的胡椒鹽

平滑濾波器

中值濾波器 

銳化濾波器

         這次的作業大部分還是從別人那裏問到怎麼寫的比較多,自己寫出來的很少,但是對於每個濾波器還是有一定的了解,所以在不會寫的時候再問別人就可以比較知道自己的問題在哪裡,也比較好理解,只是剛開始沒有人可以問的時候,花了很長一段時間再想該如何撰寫程式碼,但因為完全沒有頭緒,所以之後只好請求好朋友的開導跟程式碼的參考,說真的看到打好的程式碼,其實真的不難(除了銳化)只是我不知道該如何將我理解的東西轉化成程式碼寫出來,其實老師上課都有說過,只是本來就對寫程式比較弱的我,再加上回家沒有確實的跟進每個禮拜的進度,所以很難在很短的時間寫出來,但是看過並且弄懂了之後 ,就自己想想看再寫,但是這中間對於銳化濾波器還是很疑惑,所以花了比較長的時間再詢問該如何將程式碼寫出來。

99360683 陳毅賓

原始圖片
平滑化
銳化
加入胡椒鹽
中值濾波器

這次最主要先會如何利用ScanLine抓取周圍八個pixel值,並且要注意迴圈的範圍避免超過影像大小,這樣平滑化就比較容易寫出來,而平滑化是將周圍八個pixel值加本身的總和除以九存回原本的指標陣列裡,我卡最久的就是銳化還是從網路範例改出來,還找不出原本的程式錯在哪,最後就是中值濾波器,中值濾波器是將九個點排序找出中間值,這次除了問同學,就是在網路上一直找相關範例試,到最後慢慢改出來。

99360720 張婉琳


三原色:


光的三原色(左圖)  顏料的三原色(右圖)

附上部分C#程式碼 :




RGB Modle:


固定 R 為 0, G 和 B 從 0 ~ 255 變化(左圖)
固定 G 為 0, B 和 R 從 0 ~ 255 變化(中圖)
固定 B 為 0, R 和 G 從 0 ~ 255 變化(右圖)

固定 R 為 255, G 和 B 從 0 ~ 255 變化(左圖)
固定 G 為 255, B 和 R 從 0 ~ 255 變化(中圖)
固定 B 為 255, R 和 G 從 0 ~ 255 變化(右圖)

固定 R 為 128, G 和 B 從 0 ~ 255 變化(左圖)
固定 G 為 128, B 和 R 從 0 ~ 255 變化(中圖)
固定 B 為 128, R 和 G 從 0 ~ 255 變化(右圖)

附上部分C#程式碼 :


2012年11月22日 星期四

99360241 柯子亦

這次設計的介面


以下是光的三原色

顏料三原色

以紅色為底色,一張圖是紅色設為255,另一張則設為0

綠色為底色

藍色為底色

心得:
這次其實對我來說最大的挑戰就是ScanLine!如果Image是用畫上去的ScanLine似乎無法進行改值的動作,結果後來還是只能乖乖地在自己偷偷input一張圖進去,不過老師有說直接指定畫布大小和格式,到我交作業的剛剛我都還沒試出來。至於這次作業部分較上次簡單太多,只是純粹控制PtrImageRow裡面的值罷了,至於老師那些改圖片還有YUV可能等我這周末再看看了。

HW3_色彩模式实现心得_01362512

色彩模式实现心得

1.    三原色
1.1光的三原色

l  实现原理:
实现只需要在画布上设定三个圆点ABC,再扫描画布,若点距离圆心在ABC半径范围内则分别修改RGB的值为255(先初始化画布黑色(0,0,0),再扫描时修改,相当于实现颜色重叠的过程)
l  界面设计:
  l实现过程:
在实现时一开始想到的是histogram的作业中结果图中出现的色彩重叠出其他颜色的情况(如下图),用红蓝绿出现了紫色褐色的情况,就想直接用lineto方法是不是可以保留原像素点的原色彩通道的值,会叠加颜色,于是试着用lineto方法写了一下圆的重叠((j,i)lineto(i, j+1)即刻画出圆)

可是出来效果并不是理想中的叠加色彩的情况,而是如下:

看起来的效果其实和直接canvas->elipse画圆的结果是一样的.后来分析了一下,histogram的柱状图放大观察,其实还是红绿蓝组成的,而眼睛看出为什么会出现其他颜色是因为眼睛分辨不出三条细线混在一起造成的色觉.
后来就回归正途,直接拿图片的内存像素点信息修改,当时想到了一开始老师教的基本指令” Image->Canvas->Pixels[i][j] = (TColor)RGB(r,g,b)”,就想试试看,都用Pixels[i][j]数组来修改,实现出来达到要求,效果如下:

写了一个用scanline直接修改作对比Pixels数组速度明显比scanline慢很多.后来上课老师解释,才知道用Pixels是图片的一个二维阵列存储了每个像素点的RGB结构信息,使用它最终会深入到scanline去做运算后返回,因此速度明显比scanline直接修改图片信息慢.
1.2颜料的三原色

l  实现原理:与光的三原色相近,不同的是先将原图设为全白,扫描画布时点距离圆心在ABC半径范围内则分别修改RGB的值为0则可.
l  实现过程:
在光的三原色基础上,实现顺利,如下图:

2.    色彩立方体
   l  实现原理:
            

如图,六个面,每个面的某个色彩通道对应值为255,其余两个随着轴方向递   增,:AR值均为255,B,G值随着BG轴方向从0255递增.其余面同理.实现时增加规定通道值可变.也就是实现A面时,同时提供R0-255的调整,也就是同时实现了R.其余面类推.
l  设计界面:
  
   通过radiobutton选择当前可变通道通过tracebar拉动可变通道对应的值,左边坐标同时显示当前通道拉动值为多少.坐标显示的label会随着radiobutton的选择而变化.
l  实现过程:
   在实现时每个面的实现比较简单,花的比较多的时间是界面的设计,不想用三个image分别show出效果,于是就做出了radiobutton供选择,而实现时coding也因此变得简洁,如下:
Byte* bpr ;
for(int i = 0 ; i < 256; i ++)
{
         bpr = (Byte*)this->Image2->Picture->Bitmap->ScanLine[i];
         for(int j = 0; j < 256; j ++)
         {
                      bpr[3*j + x] = j;
                      bpr[3*j + y] = 255 - i;
                      bpr[3*j + fixChannel] = value;
         }
}
 其中x,y,fixchannel值根据当前选择通道改变.
l  实现效果:
       效果展示每个通道的0255的情况
当前通道\通道固定值
0
255
R
G
B
实现效果为理想的ColorCube的分别六个面的色彩图.其渐变效果也十分自然.
 fixchannelR,变化如下(R分别固定为0->99->180->255)




3.    YUV色彩模型
l  实现原理:
“Y”表示亮度,”U” 是色度,”V”是浓度.其中RGBYUV的转换公式为:
这种色彩模式对亮度比较讲究,侧重视觉对亮度的敏感程度.而老师提供的整型数值移位实现两种色彩模式.
利用以上公式实现比浮点运算更加方便与快速.
l  界面设计:

左边为YUV2D表示,右边为自己load进来的实验图.2D平面图中任意点击,会改变实验图整体的色度浓度风格同时label显示点击的UV.
l  实现过程:
2D模型图:ColorCube实现一样道理,在扫描整张图时,每个点都通过坐标(V,U)以及tracebar获得Y,如此便可以用以上移位公式快速的转换得到对应的RGB,紧接着修改像素点的内容则可.
实验图:对于实验图,任意点击左边的2D模型,获得某对UV,根据这对UV,结合原图像每个点的亮度(Y = ( (66 * R + 129 * G + 25 * B + 128) >> 8) + 16),于是每个像素点都有YUV,再利用RGB转换,YUV转为对应的RGB,改写实验图的内容则可.
l  实现效果:
2D模型(Y分别是0->80->160-> 255)




l  实验图:
Y:83 U:71

Y:69 U:180

Y:211 U:69
观察效果,图片确实能根据特定的UV值改变整体的色彩风格,使图片色调从彩色变化成为偏向绿,,橙等单色调图片
4.    HSI模型
l  实现原理:
H是色调,S是色饱和度,I是亮度,HSI色彩模型从人的视觉系统出发,十分清楚地表达了色调、亮度和色饱和度的变化情况.3D模型为锥形.(如下图)

其中HSIRGB同样存在着转换关系.
参照Digital Image Processing书上提供的公式完成HSIRGB的转换.
l  设计页面:

I的值可以通过tracebar调整
l  实现过程:
在扫描整张图时,对于每一个点都必须算出对应的H,S,I值才可以转为对应的RGB.I直接获得,S为距离比上半径.(当做单位圆看)
如图,对于A,S的计算如下:

H的计算比较麻烦一点.我的方法如图示:

ABCD的坐标均为(x,y),圆心O的坐标为(x0,y0),则θ的计算可以为:
θ = arctan(abs((y-y0)/(x-x0)))
求得θ之后再根据x,y判断点处于哪个象限,再对应地加上90°或180°或240°
对于90°求θ另外判断.
理论都懂了,但是在实现的时候发生了一些小问题,一开始写的时候不知道S是比例,直接用实际的距离,后来是忘了截断RGB的值.然后产生了一堆各种各样的图.(如下)

S计算成实际距离以及I忘记换算成0-1之间(tracebar max100)

没有截断:clip

为了显示点击像素点的颜色,故在后方加了一个panel来显示点击的颜色
l  实验效果:
最后修正了算法以及各个特殊情况的检验之后,得出正确结果图如下:
I=0

I=0.25

I=0.5
I=0.75

I=0.97

从结果中可以观察得,随着I不断增大,圆饼图的亮度也不断加强.刚刚做出结果时想要检验正确性,于是上网浏览了其他的HIS,其中看到一示意图如下:

于是以为自己的图不正确,后来经过提问,自己也觉悟上图只是单纯的把HIS分开了,也就是色浓度并没有在上图显示,而是在旁边矩形中选取.

5.    8位灰阶图与24位灰阶图
l  实验原理:
一直以来程序都是针对24bmp图像格式,对于24位的灰阶图之前也联系过,将每个RGB都赋予同一个值即可,这个值可以是亮度,也可以是R,G,B任一值.
由于三个值都一样,若对于图像只要记录一个值就可以剩下空间,因此使用8位图像格式可以大大的节省空间.每个像素点的8位指的是index,该像素点对应颜色在调色板中的index,因此必须明确调色板的设定.
l  界面设计:

分别作出8位与24位灰阶功能,保存后可以对照所占内存大小.
“Reload”是为重做按钮.
l  实验过程:
这次涉及到调色板的编写,通过上课的理解以及课外查阅完成.
声明一个调色板并申请相应大小的空间,设定版本以及元素个数:
设定每个颜色的RGB:

完成调色板的设定后,将调色板赋予该图像则可.然后再循环图像每个像素点设定调色板中的index,在这里我用像素点原来的亮度值对应index.
实现时要修改图像的格式,将其PixelFormat改为8bit.
可是运行时出现了奇怪的结果如下:

后来检查发现其实时修改PixelFormat的时候放在了调色板设定完之后,因此导致了实际图像的调色板使用了内建的调色板.
将图像格式的修改放在调色板之前则修正了问题.
Gray-24bit:

占用内存:

Gray-8bit:

占用内存:

可见8bit 格式的图像占用内存缩减到三分之一左右.

6.    总结:
这次通过自己编写程序完成各个色彩模式的模型图实现,其中运用到多种转换公式,在遇到问题查阅资料过程中也加深了对各个色彩模式的理解.HSI,YUV,RGB.以及互相之间的转换原理.虽然在实现时会碰到一些不确定的现象,通过咨询老师以及翻阅书本,还是能够明确下来,比如说HIS色彩模型的圆饼图.这样实现下来就熟悉了几种色彩模型的定义,各个因素(”HSI”中的H,S,I),了解了生活中使用描述的例子,多用于哪些应用等等.以这样一种印象深刻(自己实现)的方式学会色彩模型的基本概念以及来由也是很不错的.