顯示具有 2010hw4 標籤的文章。 顯示所有文章
顯示具有 2010hw4 標籤的文章。 顯示所有文章

2011年1月12日 星期三

HW4

這次作業是將圖平滑化、銳利化,最後是中位數濾鏡處理去除胡椒鹽,這部分我是使用老師提供的圖,來減少雜訊,以下是所呈現的圖:
原圖

平滑化
將周圍的像素點像數值相加總後,除以9,執行出來就會有平滑化效果。(上圖好像不太清楚)
銳利化
以課本來看,我將所選取的中心點乘以8之後,周圍的8個點皆*(-1)來表示,會使圖片看起來更把色彩帶出來,顯得更立體。

去除胡椒鹽
首先我把鄰域中像素的值做排序,再來將一個像素的值用該像素鄰域中強度值的中值來取代,也就是找出中位數,把相差太大的取代掉(去除雜訊),作業是要使用3*3的濾鏡處理,也就是找中值是第五個最大的值,把周圍鄰近的點處理為相似點,讓影像具有雜訊減少的表現。

2011年1月10日 星期一

照片3D化作業




原圖左眼


原圖右眼

合成後的3D圖
拍照的角度真的很難喬,反覆試了好幾次才成功,要放在桌上拍不能用手持不然照片會對不起來,左右眼的視差沒有想像中那麼大,一開始移動的角度太大,造成影像合成起來很假甚至沒辦法對起來,慢慢修正角度做出來的效果就好多了,程式碼就照著老師範例剪剪貼貼就好了,真正麻煩的地方真的在拍照片,最後是福利區,附上一張我之前買雜誌送的3D內頁,海星真的會浮起來喔 : D

2011年1月8日 星期六

HW4

這次大概總共拍了六張照片,第一、二張的3D合成圖是用眼睛的距離來做寬度所拍攝的。 第三張則是拍左右兩張時稍微向目標物旋轉一點角度來拍攝的,我也分不清楚哪一張比較好。所以把它都給放了上來。














































這種方式的3D呈現,是用雙眼之間的視差再透過戴上紅藍眼鏡過濾光線所產生的立體影像。
不過這樣的方式實在是太累了,長時間帶著眼鏡是一種痛苦阿!!!(看久頭很暈=.=)

難道不戴3D眼鏡就不能看見3D影像嗎? 難道不能用裸眼看見3D立體影像嗎?
答案是:YES! 可以不戴眼鏡就看見3D立體像影。

理論已經出來了,分別有三種方式:視差屏障式(Parallax Barriers)柱狀透鏡式(Lenticular Lenses)裸視3D技術:指向光源式(Directional Backlight)
三種的方式不盡相同,有的是用兩組LED來呈現,有的是用柵欄的方式來阻擋,甚至有利用凸透鏡薄膜來做。

並且在去年東芝(Toshiba)就已經發行了兩款裸眼式的3D電視。證明這些未來都是有可能的。
也許以後進電影院就不用再戴眼鏡了,應該也不用收那個3D眼鏡的費用了吧?!但是希望他不要藉機漲價...!

附上裸眼式3D技術連結

另外有找到兩個介紹東芝的3D電視影片
東芝裸眼式3D電視1
東芝裸眼式3D電視2

大廠商製作裸眼3D電視不稀奇
自己DIY製作36度的裸眼式3D
這個就厲害了吧!!!(約在影片11:35左右)

===================================================================

修了一整學期的課,中間因為車禍缺席了一陣子,不過總體來說這門課感覺上真的是滿好玩的,雖然對BCB整個不友善,不過上到濾鏡跟3D這方面,我自己是上的滿開心的。雖然一開始選這門課是因為畢業的核心課程,但是上完之後確實有學到很多不一樣的東西。ex:BCB。如果沒有修過這門課,我大概也不會知道原來BCB可以處理這麼多事情吧。不過我還是偏愛用VC++....哈哈!

HW4

平滑化:

平滑化的做法就是將這個像素點周圍像素相加後取總像素的平均,
如有9個像素點,中間為原本的像素點
┌ ┐
|左上 中上 右上|
|中左 中中 中右| / 9 = 模糊3倍
|左下 中下 右下|
└ ┘

不過如果全彩圖只做一次9宮格的判斷事無法跑出結果的,
因為一次判斷只能用來處理灰階的圖片,而不能用來處理彩色的圖片,
若要處理全彩的圖片,則必須考慮到RGB三色的個別9宮格的處理,

如圖:
就是使用全彩圖片只判斷一次的結果

因此程式方面必須
bPtrResultImage[j*3] =>B Color 進行平均
bPtrResultImage[j*3+1] =>G Color 進行平均
bPtrResultImage[j*3+2] =>R Color 進行平均
在完成後在將BGR放回新的圖片中,就完成了。

成果:




銳利化:

銳化基本上與平滑化差不多,但是銳化並不需要平均,
而是將中間的像素點給凸顯出來,
如:
┌ ┐
|左上*1 中上*1 右上*1|
|中左*1 中中*-8 中右*1|
|左下*1 中下*1 右下*1|
└ ┘
但是在算出後減掉原圖的Color,就相當於直接做
┌ ┐
|左上*-1 中上*-1 右上*-1|
|中左*-1 中中* 9 中右*-1|
|左下*-1 中下*-1 右下*-1|
└ ┘


下方圖片為*9的成果



但因為我發現*9的銳化太過凸顯,因此我讓圖做了一次*5的銳化進行測試,
而*5的銳化則是,只取
┌ ┐
| 中上 |
|中左 中中 中右| 這5個點
| 中下 |
└ ┘

因此作法為
┌ ┐
| 中上*-1 |
|中左*-1 中中*5 中右*-1|
| 中下*-1 |
└ ┘

成果:

銳化的程式基本上也與平滑相同,只是並不需要再做平均,而是將各值分別乘上數值後再加起來,但是為了防止溢位的發生,必須在做完後再做判,預防RGB大於255或小於0的情況。


中位數濾鏡處理, 去除胡椒鹽雜訊:

其實作法相當簡單,就是將9宮個的值進行排序,將排序完的結果取中位數,
而彩色圖的中位數濾鏡則必須加上RGB3值的各別排序。

成果:



心得:
這一次的作業,我認為相當的簡單,因為課本上有關於這三部分的解說,
而且老師的課程部落格上面也有老師去年寫過的程式範例,不過那雖然只能做灰階圖形,但是其實要在程式內考慮進RGB的判斷相當的簡單,但是由於胡椒鹽的去除方面,並沒有辦法完全的去除,因此在後來我一直在設法改善,企圖將雜訊完全去除,
雖然後來有改善許多,但是並未完全去除,因此還是不太滿意做出來的成果。

HW4

題目:濾鏡處理程式
原圖

平滑化
平滑化的目標是將所選取的點周圍九宮格的值加起來並進行平均的動作。
銳利化
銳利化的目標是將所選取的點除了本身乘於九以外,周圍九宮格的點都乘於-1的動作,來達到顏色明顯的對比,另外還要判斷其值是否大於255或0,當大於255則令他的值等於255,小於0責令他的值等於0,否則圖形的顯示會有些怪怪的。
去胡椒鹽

原圖 去胡椒鹽
去胡椒鹽的目標是將所選取的點其周圍九宮格的點進行排序,在取出排序出來的中間值來顯示,藉此達到去除雜訊的效果,。
心得:
這次的作業主要在於如何取出目標點並將其周圍九宮格的值進行平滑,銳利,去胡椒鹽的動作,比起灰階的多增加了R,G,B的取值,經由演算法的講解跟同學的討論,就容易實作出來了。

hw4

作業四濾鏡處理,我覺得平滑、銳利、中位數濾鏡其實都還蠻簡單的。
過程中沒有遇到什麼太想破頭的問題。
平滑化:

平滑化應該是三個裡面最簡單的。每個像素把周圍八個像素給加總,最後在除以9。


銳利化:

銳利化,本來以為用動物會讓效果比較清楚,因為圖太小了,所以看不出來,老虎那個毛清晰的樣子,不過確實是銳利化了,整隻老虎有立體起來的感覺。
銳利化說真的寫完,我還是有點不太懂那個係數?看了課本又是二階導數又是普拉普斯,真是越來越困惑了。
另外,本來依舊想要用資工彌的那張照片,可是不知道爲什麼銳利化後的圖片,會感覺好老唷!所以就改成動物。
code:

for (int i=1;iHeight-2;i++)
{
byte *row0 = new byte[1];
byte *row1 = new byte[1];
byte *row2 = new byte[1];
byte *row = new byte[1];
row0 = (byte *)Image1->Picture->Bitmap->ScanLine[i-1];
row1 = (byte *)Image1->Picture->Bitmap->ScanLine[i];
row2 = (byte *)Image1->Picture->Bitmap->ScanLine[i+1];
row = (byte *)Image7->Picture->Bitmap->ScanLine[i];
for (int j=1;jWidth-2;j++)
{
int x=0, y=-1, z=5; //係數
r=(row0[(j-1)*3])*x+(row1[(j-1)*3])*y+(row2[(j-1)*3])*x
+(row0[j*3])*y+(row1[j*3])*z+(row2[j*3])*y
+(row0[(j+1)*3])*x+(row1[(j+1)*3])*y+(row2[(j+1)*3])*x;

g=(row0[(j-1)*3+1])*x+(row1[(j-1)*3+1])*y+(row2[(j-1)*3+1])*x
+(row0[j*3+1])*y+(row1[j*3+1])*z+(row2[j*3+1])*y
+(row0[(j+1)*3+1])*x+(row1[(j+1)*3+1])*y+(row2[(j+1)*3+1])*x;

b=(row0[(j-1)*3+2])*x+(row1[(j-1)*3+2])*y+(row2[(j-1)*3+2])*x
+(row0[j*3+2])*y+(row1[j*3+2])*z+(row2[j*3+2])*y
+(row0[(j+1)*3+2])*x+(row1[(j+1)*3+2])*y+(row2[(j+1)*3+2])*x;

if(r>255)
r=255;
if(r<0)
r=0;
if(g>255)
g=255;
if(g<0)
g=0;
if(b>255)
b=255;
if(b<0)
b=0;

row[j*3]=(byte)(r);
row[j*3+1]=(byte)(g);
row[j*3+2]=(byte)(b);
}
}
-------------------------------------------------*


中位數濾鏡:
中位數濾鏡最讓我頭痛的應該是排序法,突然有點對不起熊大,我把演算法都忘掉了><:::。
而有胡椒鹽圖片是我自己用小畫家點出來的。
code:
//中位數濾鏡主code

for i to Image的長
{
宣告原圖跟目的圖的ScanLine;
for j to Image的寬
{
前面把R_array, G_array,B_array把每個RGB給取好。

r = QuickSort(R_array,0,8);
g = QuickSort(G_array,0,8);
b = QuickSort(B_array,0,8);

row[j*3]=(byte)(r);
row[j*3+1]=(byte)(g);
row[j*3+2]=(byte)(b);
}
}

//快速排序法 且回傳值為中位數
int QuickSort(int data[],int left,int right)
{
int num = right+1;
int i,j;
if(left {
i=left+1;
j=right;
int target=data[left];
do
{
while((data[i] i++;
while((data[j]>=target)&&(i<=j))
j--;
if(i {
int temp;
temp=data[i];
data[i]=data[j];
data[j]=temp;
}
}while(i if(left {
int temp;
temp=data[left];
data[left]=data[j];
data[j]=temp;
}
QuickSort(data,left,j-1);
QuickSort(data,j+1,right);
}
return data[num/2];
}
-----------------------------*

HW4

原圖

平滑化

尖銳化

胡椒鹽及去胡椒鹽

這次的作業是要做一個3*3的濾鏡處理圖片,一開始時實在是聽不懂老師上課講的那些數學公式所以卡了很久,後來在聽老師在對其他同學做講解用圖式的概念講解九宮格的圖及每個格子裡面的值就比較清楚了而在寫的過程中平滑化還蠻快就弄出來了可是在尖銳化的地方卡了很久,後來發現還是九宮格的問題因為沒弄很懂導致圖做出來都沒預期的效果後來問人把他弄懂後就解決了。平滑化簡單的說就是取平均先對自己做相加在做平均,去除周圍較尖銳的部分使其看起來較柔化。而尖銳化則剛好和平滑相反他是把自己本身的值變大在減去周圍的值,而較需注意的是利用這做法像數值很可能會超過0~255這範圍所以必須把小餘0的設為0而大於255的設為255這樣才不會使圖出現問題,處理完之後會變得更強調細部線條的部分使圖看起來較為銳利,而最後的去胡椒鹽則是利用中位數的概念把圖片中屬較極端的值取代掉使其達到去除雜點的效果。

2011年1月7日 星期五

HW4


首先是Smoothing與Sharping,第一張為原圖,第二張為Smoothing,雖然貼在blog上的圖片小,看起來不太明顯,不過應該還是看的出來陰影的地方確實有變的比較模糊,第三張圖為Sharping,這張圖就可以很明顯看的出來其差異性。
 
Smoothing的原理其實相當簡單,就只是單純的把目標點及周圍八格的值取出來相加再平均,所以程式碼寫出來也不需要寫的多複雜,就是單純的取出點然後相加,而作灰階跟彩色的差異,也僅止於灰階只要取一次,而彩色需要三種顏色分別各取一次,總共取三次,如此的差別而已。
 
而Sharping的原理稍微比Smoothing複雜一些,課本上寫說可以取周圍四點乘以負一及中心點乘以四相加,或是取周圍八點乘以負一及中心點乘以八相加,藉此達到Sharping的目的,這次作業我選擇使用取八點的方法,因為這種取法可以直接拿Smoothing完成的程式碼直接修改,而且取九個點排版比較整齊,檢查錯誤也比較容易。 
接著是MediumFiltering,也就是所謂的去除胡椒鹽雜訊,第一張圖是原圖,第二張是進行一次去除,第三張是我將第二張圖存檔再去除雜訊一次,很明顯可以看出,第一次就已經將大部分的雜訊除去,而第二次做完,幾乎已經沒有雜訊了,MediumFiltering的原理與前面兩個有些類似,一樣是要取出該點及周圍八點的值,與前兩者最大的差別在於,MediumFiltering取出值之後要進行排序,再從排序完的值中,取出中間值放回該點,來達到除去雜訊的目的。
 
這次的作業跟前幾次比起來算是相對簡單的,老師上課講解完Smoothing的概念沒多久,我就把Smoothing的部分寫好了,其他兩種也沒有特別需要花時間思考,或容易卡住的地方,想法都很直觀,比較多問題的地方可能就是在取出九個值時,會少寫個+1或+2或是*忘記寫,有一兩個同學出的問題就是在那上面,只要排個版對齊就很好解決,沒有什麼大問題。

hw4

這次作業分別是要做模糊化 銳利化 和去除雜訊


左邊是我這次選來做模糊化以及銳利化用的原圖









這張是原圖做了模糊化之後的效果
這次選的圖 在模糊效果上好像比較不明顯?
似乎有比較柔和的感覺?

在模糊化上以九宮格的方式
將3*3內色彩值相加做平均
以此達到模糊化的效果







左圖為銳利化

在銳利化上的效果就比模糊化看起來明顯的多了
真是一隻漂亮的刺蝟(誤

我這次銳利化選用的方式為
以九宮格的方式 將最中心的色彩值跟
周遭的色彩值 拉出明顯的差距
如此一來 就能將中間的色彩凸顯出來






左圖為這次要去除胡椒鹽雜訊的原圖


















去除雜訊後.....
看起來效果相當不錯?
顆顆

去除雜訊的撰寫
採用將3*3內的值取出之後做排序
找出中位數 並取代其值
就能達到去除雜訊的效果了
因為相差太大的值 被取代掉了








這次程式撰寫上,還是由老師的範例程式做為基準開始改起,這次程式撰寫的過程上,主要是卡在該怎麼取值,才能達到模糊、銳利、去除雜訊的效果,也是這次程式撰寫上的重點,大家集結在一起寫程式時候,遇到問題剛好就可以一起討論,比一個人單打獨鬥來得有效率。

HW4

原圖跟平滑化


平滑化得程式碼
這次的平滑化,讓我想了很久,因為老師給得程式碼是灰階的,所以我們要把它改成彩色用的,想了很久,不過還是想到以前用得程式碼,所以就試試看,結果出來的成果還是很不錯的,不過這是有人提出來的,所以我只是把它拿來試試看而已,基本上只是之前得程式碼拿來改改看而已,不過做出的成果還是很不錯的,也跟其他人比照,改了一些小地方,使得這個圖比之前自己做出來的好多了。


原圖和銳利化


銳利化程式碼

這是這次的作業part-2銳利化,銳利化是通過尋找影像中的邊緣像素,通過下方圖的作法使圖片的某些地方比其他地方來的明顯,而變得比原圖來的犀利許多,我的作法式通過把9個點除了中間點之外全部都乘以(-1),而中間的乘以(9),使得中間點比其他8點來的凸顯,但是如果超過255的話,就必須保持在255,而低於0的話,就必須保持在0位置上,這樣才能確保程式沒有問題。 原圖及胡椒鹽


胡椒鹽程式碼
作業中part-3去除胡椒鹽,我覺得這個作業中比較簡單的部分,因為只要把尋找的9個位置存到data裡面,然後把這些做排序,最後則是取中位數,使之替代掉一些,所以說這樣可以使周圍都跟中位數一樣,並不會跟原圖一樣有胡椒鹽,讓凸顯得更加完美。

在這次作業中得程式碼,基本上都是跟同學討論或是請教老師才寫出來的,所以我覺得滿充實的,尤其是一開始老師什麼都沒講,要我們自己去看課本或是共同討論出來,不過最後老師還是提供了程式碼給我們,不過慶幸的是這次的程式碼是先討論出來的,然後再跟老師得程式碼比對,並且實作出來,所以說老師願意空出課堂的時間來給我們討論這些作業,我覺得很感興老師的用心,而且這些也帶來了很多樂趣,讓我感到原來這麼多人討論是這麼愉快的事情。




HW4

這次的作業是要做平滑化和銳化以及去雜訊處理。透過老師分享的灰階影像 3*3 空間濾波器之模型去修改,分別去處理3*3裡面RGB三色以達到要求的效果。

以下是原圖

首先是平滑化,把3*3的RGB值分別做相加和平均處理以達到平滑效果,處理後圖片最外圈會變為白色的。
以下是平滑化的圖
再來是銳化,銳化是把3*3裡的RGB值分別做比例分配後再相加
我所用的比值如下:
0 -1 0
-1 5 -1
0 -1 0
以下為銳化後的圖片

最後是去雜訊處理,用的方法是對3*3裡的RGB值去做大小順序排列,以取得他們之間大小最中間的值,之後再把3*3的9個值都設為中間那個值,以達到去雜訊的目的。
以下為雜訊的原圖
以下為去雜訊後的圖


這次的作業有碰到一個小小的問題,就是在最後一個去雜訊處理時,改了很久他都不肯排列順序,最後發現是for迴圈寫錯了,修改後就正確了。
最後還有google排版也太難用,用了一個小時都用不好比寫程式還久。