顯示具有 96360600 阮昱貹 標籤的文章。 顯示所有文章
顯示具有 96360600 阮昱貹 標籤的文章。 顯示所有文章

2011年1月8日 星期六

Sony 3D展

從一進展場就看到大螢幕說時再還蠻震撼的,
之後Showgirl就上場解說囉。
之前就已經知道世足的影像就是使用3D技術製作而成,
他在展示世足影片最後那部份有顆足球飛過,讓我覺得是最震撼的地方,
因為感覺那顆足球就像是要撞向自己,感覺想當的真實。


接著就是Showgirl開始展示Sony開發於PS3平台的3D遊戲,
雖然看不太出來遊戲如何,但是在後方的展場試玩遊戲後,
發現果然不錯玩,3D的立體效果完全顯現出來,
但是操控盤異常的難控制,常常會打滑。


最後開始播放3D的MTV,感覺就像是在阿凡達一樣,
雖然感覺有點不太真實,但是它的高清晰及3D效果彌補了不真實之處。



之後到後方的展場,全部都是在介紹Sony的產品,比較讓我驚訝的是Sony的相機,
再經過處理之後居然可以直接顯示出3D的效果,讓我忍不住也想買一台來用用,
參觀這場展覽讓我明白了目前3D技術已經應用到了生活上的哪些方面。

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的判斷相當的簡單,但是由於胡椒鹽的去除方面,並沒有辦法完全的去除,因此在後來我一直在設法改善,企圖將雜訊完全去除,
雖然後來有改善許多,但是並未完全去除,因此還是不太滿意做出來的成果。

HW3

3D的左右眼圖:


成果:


因為拍的技術好像不太好,因此做出來的紅色與青色看起來的寬度就相當的大。


另外找的3D左右眼圖:


成果:


心得:
基本上這個作業我在上星期六的時候就已經寫出來了,
但是跑出來的結果只有紅色與藍色,並沒有出現綠色,
但是這並不是我要的結果,

如圖


所以之後我嘗試了很多種方式,但是一直沒跑出綠色,
後來直到上課開始跟老師討論,嘗試了加強兩張圖紅、藍色,
但是測試出來的結果該是青色或紅色的部分卻變成了紫色或灰色,
並沒有出現如預期的紅色或青色,到最後還是老師發現3D眼鏡的鏡片,
只有紅色與青色,並不是純粹的藍色,因此就找到答案了。
兩張圖一張只需取紅色,另一張只需取青色,再合起來就是3D了。
如圖:



程式方面在寫出來結果後,仔細檢查發現有太多都是不必要的,
最後只需少少的幾行而已,
如圖:



在全部完成後,結果卻出乎意料之外的簡單,或許只能說把事情想得太難了吧,
但是在與老師討論時學習到了相當的多。

2010年12月10日 星期五

HW2

成果:



















































直方圖均化:



成果


























這次的作業由於太晚開始寫,而沒有去仔細思考該如何寫與直方圖的演算法,
導致要寫的時候不知道如何動手,而且寫出來的結果也與所要求的結果不同,
最後只好參考老師去年寫的範例,在仔細研讀後,其演算法與程式是了解了,
但是唯一不懂的就是老師對物件的用法,因為不了解這部分後來就只好使用自己了解的物件來做出相對應的功能,但是在上課前未能如願的做出成果,
只好利用上課的時間跟老師討論,後來我將程式有套用到老師撰寫的部分全部重新寫過,
再使用自設的物件,程式就寫出來了。
會寫不出來原因就是每個人定義變數的名稱都不同,
因此就可能照成部分的地方發生錯誤,而使整個程式展現不出成果。

之後撰寫的均化時,因為前面程式都已經將Color RGB給判斷出來,
因此均化的程式
for (k=0;k bPtrHistogramImage[i*iChanNum+k] = bEqualizationTable[k][bPtrImage[i*iChanNum+k]]; for="" k="0;k

程式就完成了。

在測試時卻發生如下圖的情況:













之後檢查程式碼後,發現原來是我將判斷式寫成就算沒有選擇任何一顏色的畫圖,
程式也會自動選取一初值來進行判斷,之後我只將判斷式寫成如果沒有執行任何選項, 則將圖片片線條顏色變成白色,就解決問題了 。

if (HistogramCl->ItemIndex == 0)
histogram->Canvas->Pen->Color = clBlue;
else if (HistogramCl->ItemIndex == 1)
histogram->Canvas->Pen->Color = clGreen;
else if (HistogramCl->ItemIndex == 2)
histogram->Canvas->Pen->Color = clRed;
else
histogram->Canvas->Pen->Color = clWhite;
因此,程式只要在最後一項判斷式改成畫出白色就行了。

在寫完均化後,如果使用較案的彩圖與較亮的彩圖進行測試,
但是卻發生大量的雜訊,並無法有效的去除,
如圖


較黑的圖在進行均化後,雖然有效的變亮了,但是周圍卻產生大量的紅藍色雜訊,
而較白的圖在進行均化後,雖然字體顏色有效的變暗了,但是圖裡卻有大量的不規則黑色,
我嘗試在均化時進行色彩的挑選,將超過一定色值的RGB Color保持原本的Color而不與其它進行均化,不過做出來的效果並不對,然後又嘗試在進行均化前先進行色彩的判斷,不過做出來的結果還是有許多雜訊,所以我想請問老師關於這種圖片改如何處理比較妥當??

2010年11月5日 星期五

HW1

因為我不確定128、64、32、16、8、4、2色的值,
是要彩色圖片轉成灰階後取轉換後的128、64、32、16、8、4、2色的值,
還是彩色圖片取128、64、32、16、8、4、2色的值之後再轉成灰階。
因此我寫了這兩部分的程式。

第一部分:
彩色圖片取128、64、32、16、8、4、2色值之後再轉成灰階。

















































































第二部分:
彩色圖片轉成灰階後取轉換後的128、64、32、16、8、4、2色的值。

















































































這次的作業我覺得非常容易,不管是第一部分或第二部分,
每個色值的判斷都只要幾行短短的程式結果就出來了。
比較需要思考的地方我認為只有如何取得128、64、32、16、8、4、2色的值,
而我研究出來的數學公式為: ( 256 * n ) / L

n: 所需的顏色數-1

L: 256 / ( n + 1 )

之後只要將計算取得色值的公式,加入程式中並加上判斷設值的轉換範圍,
這樣程式就寫完了。
程式碼如下:
for(i=0; i< iImageWidth; i++)
{
for(j=0; j< iImageHeight; j++)
{
R=GetRValue(Image1->Canvas->Pixels[i][j]); //先將圖片中的RGB個別取出
G=GetGValue(Image1->Canvas->Pixels[i][j]);
B=GetBValue(Image1->Canvas->Pixels[i][j]);

for(k=4,n=0;k<=256,n<=63;k=k+4,n++) //n為顏色數,k為強度
{
if(k-4<= R && R< k)
R=(256*n)/63; //算出該取的顏色數值
if(k-4<=G && G< k)
G=(256*n)/63;
if(k-4<=B && B< k)
B=(256*n)/63;
if(R==256)
R=255;
if(G==256)
G=255;
if(B==256)
B=255;
gray=(0.299*R+0.587*G+0.114*B);
Image64Color->Canvas->Pixels[i][j]=RGB(gray,gray,gray);
}
上面的執行結果是比較簡單的轉換法,
後來我嘗試使用直接去呼叫記憶體中的值去轉換,
但是發生了轉換後的圖改變了原本的彩色圖,
造成色彩混亂,目前這部分還在研究中。

P.S:關於呼叫記憶體發生錯誤的問題,在老師的協助下解決了。
原來只是我那部分寫得太複雜了,導致後來讀圖的時候取影響到了原本的彩色圖片。
之後聽老師上可講解老師的程式,發現我的寫法還是比較複雜,
寫得行數還是太多了,還是可以再更簡短的,這部分的能力還得再加強。

下方為聽完老師講解後修改出來的程式
for (i=0; i<256; i++)
{
pal.peRed = GrayLevel[i/4]; //在調色盤進行顏色的選取
pal.peGreen = GrayLevel[i/4];
pal.peBlue = GrayLevel[i/4];
SetPaletteEntries(GrayHandle,i,1,&pal);
}
imNew->Picture->Bitmap->Palette = GrayHandle;


for (j=0;j {
bPtrImage = (Byte *)Image1->Picture->Bitmap->ScanLine[j];
bPtrNewImage = (Byte *)imNew->Picture->Bitmap->ScanLine[j];

for (i=0;i< iImageWidth;i++)
bPtrNewImage [i]=(Byte)(0.299*bPtrImage[i*3+2]+0.587*bPtrImage[i*3+1]+0.114*bPtrImage[i*3]);
}
在執行後,比我之前寫的執行速度還要更快,而且也少了冗長的判斷,
就算判斷其它位元強度也只需要更改GrayLevel[i/4]; 紅色字的數值,
而且閱讀上也更加方便,真的事讓我受益良多,該學的還多的很。