2010年12月16日 星期四

SONY 3D展 hw3(心得.分析.3D圖.調色盤)

3D展心得:
今天我們來到了 板急,我覺得很新鮮,因為這是上大學後的第一次"校外教學"。

今天令我最印象深刻的其實是....電影"海洋生態" 因為它讓我有種距離很近的感覺,小魚比較沒有那種感覺,不過,比較大隻的魚一出現時,感覺他就在我眼前游來游去,就好像真的在我身邊。所以我對這電影特別有感覺,不知道是不是我的錯覺,我覺得 越大的東西,他的3D感越明顯。尤其是它如果往攝影鏡頭的方向前進的話,那根本就覺得它好像要衝出螢幕一般。

最後特別感謝 老師,能帶我們去在 3D展,也讓我們留下很深的回憶,就覺得明明大家都在學校 坐在椅子上上課,結果 我們竟然能那麼輕鬆的在大台北的街道上 擴展知識。別有一番趣味,又能增添自己的知識,希望以後還有機會。多逛逛一些有關資訊的展覽。


3D圖:

步驟(一): 先讀入一張照片,用自做的軟體,取出照片的RGB值,其中先把 R值*1.5倍,讓整張照片看起來偏紅。

temp=(GetGValue(Image1->Canvas->Pixels[i][j]))*1.5;
if(temp>255)
ucRed1 = 255;
else
ucRed1 = (unsigned char)temp;
ucGreen1= (GetGValue(Image1->Canvas->Pixels[i][j]));
ucBlue1= (GetBValue(Image1->Canvas->Pixels[i][j]));
Image1->Canvas->Pixels[i][j]= (TColor) RGB(ucRed1,ucGreen1,ucBlue1 );
}
}

我之所以會多宣告一個float的temp是因為怕說ucRed*1.5會爆掉 也就是超過255,所以我先用temp去收他的值 再去判斷她有 也就是超過255,所以我先用temp去收他的值 再去判斷它的值有沒有超過255。




步驟(二):在讀第二張照片,而這張照片我要讓他看起來偏藍,所以做法跟步驟(一)差不多,只是我這次是把B值*1.5,讓整張照片看起來偏藍色。當然我這次也有宣告temp來收*1.5後的值,因為還是要以防萬一。

float temp ;
ucred2=(GetRValue(Image2-">Canvas->Pixels[i][j]));
ucGreen2=(GetGValue(Image2->Canvas->Pixels[i][j]));
temp = (GetBValue(Image2->Canvas->Pixels[i][j]))*1.5;
if(temp >255)
ucBlue2 = 255;
else
ucBlue2 = (unsigned char)temp;
Image2->Canvas->Pixels[i][j]= (TColor) RGB(ucRed2,ucGreen2,ucBlue2 );
}





步驟(三):合成 步驟(一)和步驟(二)的圖片。

ucred3=(GetRValue(Image1-">Canvas->Pixels[i][j]))/2 + (GetRValue(Image2->Canvas->Pixels[i][j]))/2;
ucGreen3 = (GetGValue(Image1->Canvas->Pixels[i][j]))/2 + (GetGValue(Image2->Canvas->Pixels[i][j]))/2;
ucBlue3 = (GetBValue(Image1->Canvas->Pixels[i][j]))/2 + (GetBValue(Image2->Canvas->Pixels[i][j]))/2;
Image3->Canvas->Pixels[i][j]= (TColor) RGB(ucRed3,ucGreen3,ucBlue3);
}
}

之所以要都/2 是因為我要讓他們 每張圖各占一半。然後融合成 新的圖 ,也就是3D圖。





改了一下程式碼以後.....我用老師部落格的比例下去做!!

第一步:一樣先取紅值!! 不過我只取紅色,其它色都取0....
temp= (GetRValue(Image1->Canvas->Pixels[i][j]))*1.5;
if(temp>255)
ucRed1 = 255;
else
ucRed1 = (unsigned char)temp;
ucGreen1= (GetGValue(Image1->Canvas->Pixels[i][j]))*0;
ucBlue1= (GetBValue(Image1->Canvas->Pixels[i][j]))*0;
Image1->Canvas->Pixels[i][j]= (TColor) RGB(ucRed1,ucGreen1,ucBlue1 );




第二步:我取"藍"和"綠"值,紅值我給取0
ucRed2 = (GetRValue(Image2->Canvas->Pixels[i][j]))*0;
ucGreen2 = (GetGValue(Image2->Canvas->Pixels[i][j]));
temp = (GetBValue(Image2->Canvas->Pixels[i][j]))*1.5;
if(temp >255)
ucBlue2 = 255;
else
ucBlue2 = (unsigned char)temp;
Image2->Canvas->Pixels[i][j]= (TColor) RGB(ucRed2,ucGreen2,ucBlue2 );



第三步: 2張圖和成 就是 各值/2 再相加
ucRed3 = (GetRValue(Image1->Canvas->Pixels[i][j]))/2 + (GetRValue(Image2->Canvas->Pixels[i][j]))/2;

ucGreen3 = (GetGValue(Image1->Canvas->Pixels[i][j]))/2 + (GetGValue(Image2->Canvas->Pixels[i][j]))/2;

ucBlue3 = (GetBValue(Image1->Canvas->Pixels[i][j]))/2 + (GetBValue(Image2->Canvas->Pixels[i][j]))/2;
Image3->Canvas->Pixels[i][j]= (TColor) RGB(ucRed3,ucGreen3,ucBlue3);



心得:
其實用BCB寫真的不難,只是我一開始演算法用錯了,一直給它亂成數值,被自己成到數值爆掉都不知道。
後來經過來老師的說明和教導,我才發現原來我之前的做法都是錯的,因為我都給他亂成數值。
還有...其實我覺得拍照是最難的部分,因為你要抓適當的角度,還要找是合的環境,因為有些照片拍起來很難有3D的感覺,所以你要同一個廠頸去拍很多張不同角度的照片,難後一張一張的慢慢試,還步一鄧會有結果,因為可能是你找的環境原本就沒有遠近的感覺,所以很難有3D感。
我以我覺得做這個作業,需要花一點心思,不能草率,不然就算給你做出來,圖也不好看,也沒想要的3D感。 像我拍的這張,我的取景就不怎麼好,所以他的3D感覺沒有那麼明顯,我見一之後想做3D的圖片時,重要的拍照,一定要特別獎就拍照的品質,就好要帶個腳架。程式碼並不是重點,因為程是真的不難。


沒有留言:

張貼留言