2011年1月7日 星期五

HW3

這份作業主要是要達到影像的平滑(模糊)化、銳利化、以及雜訊的消除,

下面為原圖:



這三種的作法大略相同,首先建立三個BYTE化的二維陣列,
運用指標的方式將他們分別指向欲取得值前三行之標頭,接著運用兩個FOR迴圈舉得以這三行
為起點的3*3像素點格子,平滑化是將取得的這9個像素點合併給與
另一個BYTE化的2維陣列存放,並將其除上9使其影像周為顏色混合以達到影像模糊的效果,
而在我實際設計過後發現,假使FOR迴圈已J遞增值僅輸出三個二維陣列分別為 J-1、J 、J+1的情況下 ,由於前面的表示方法為灰階形式,使得程式判定輸出的為灰階影像,
會產生出的模糊化會形成類似灰階影像的模糊影像,
加上有些值或許判斷不到,因此會形成影像有一部分沒有值的狀況,
在詢問了同學之後,得知了必須將遞增值乘上3,
這麼做使得程式能夠取得除了黑白以外的三原色的像素值,
即J*3-1,J*3,J*3+1,在使用上述的平滑化處理方法即可取得平滑化的影像,
或許這對別人而言是在合理不過的原理,
但對我而言能從程式裡發現一些之前都沒留意到的事,是一種很珍貴的回憶
下圖即為平滑化的結果:




至於尖銳化則是運用平滑化的處理方式,一樣是將鄰近的9個像素值合併,不同的是此9個像素點的中心顏色值必須放大,以中心為準的上下左右顏色值則需要縮小,其餘的4個值則無需顧慮,
如此便能強烈凸顯該中心值在影像上呈現的效果,使得影像展現出強烈的硬式線條感,值得注意的是由於合成過後的像素值並無像上述平滑化一般合併完後均分的現象,因此有可能因為得出的
像素值超過255而造成顏色亂跑的現象,因此必須運用IF來做調整,假使該值超過255則以255計,當小於0則以0計,其餘的則照正常輸出,如此便可以避免色素值溢位的狀況

下面即為銳利化的效果:



而雜訊的消除做法上雷同,同樣需利用到鄰近的9個像素點,
有趣的是利用到了排序將這九個像素值從大到小去排列,
再取得其中的位中數直接當作該新像素點的數值,

下面為原圖:

下面即為消除雜訊後的影像:
很清楚的發現消除雜訊之後的影像顯得較為清楚,
那是由於在取中位數當心像素值的情況下的情況下,大部分像素值較極端的像素點,
便會被較柔和的中位數取代,這樣即能達到去除雜訊的效果,
當然假設雜訊過於密集的話還是無法完全的消除所有雜訊,
不過此種作法依然能作到處理大部分雜訊的效果,
這三個對影像進行的處理做起來都不會太難,大抵是在合成像素值時多加留意即可完成

沒有留言:

張貼留言