顯示具有 95360263 莊仲炫 標籤的文章。 顯示所有文章
顯示具有 95360263 莊仲炫 標籤的文章。 顯示所有文章

2010年1月16日 星期六

HW8

期末心得

之前有上過老師的數位媒體導論,所以對於BCB的接觸倒也不是第一次了.

比起其他程式來說,我覺得BCB是一個讓我覺得滿有趣的程式.

這次上課的方式跟之前數位媒體不一樣的是有很多操作撰寫程式的時間及作業

總共七個作業,除了第一次二維陣列開圖檔是因為之前有經驗,所以很輕鬆之外.

其他像是旋轉 畫直方圖 bit plane 及scanline 這些都東西都讓我傷透了腦筋~"~

不過還是有慢慢的將那些作業打出來~雖然總是拖了很久~"~

這一學期下來,在影像處理這堂課中,也學到了不少跟影像有關的知識.

也真的感覺到自己在這堂課有所進步......

HW7

梯度銳化

這次的程式我偷懶的把上一次頓化的程式碼拿來修改成這次作業~"~

大致上來說並不困難,縱向橫向遮罩的方式課本上都有提到,公式也只是把兩個遮罩後的值做畢氏定

理運算.所以都還滿簡單的.不過卻有一個困擾我的問題,明明就有指定result的長跟寬為來源圖的長

寬,但是執行時還是會一直出現"Scan line index out of range"= =???~莫非還有其他的因素.......


HW5

Bit-plane 位元切面

上這堂課的時候我好像沒有到,所以只好問人有關這個題目的觀念..

不過都搞不懂什麼把圖片切成八部份, 於是我一直想成把圖片橫切八個部份....讓我困擾了一陣子

後來經人耐心的講解後,才知道原來是把圖片像素跟00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000這八個bit做and運算提取出像素質

基於我還對scanline的用法還不熟,所以只好延用之前的二維陣列去寫出這個程式......

以下是我的成果圖












2010年1月7日 星期四

HW6

這次的作業是做一個空間濾波器

我做得是一個3*3的濾波遮罩

運算方式是將圖片(1,1)這個點為中心的3*3正方形與遮罩器做運算後的運算結果

放置新圖片(1,1)的點上,然後往右遮罩

(Mask1*(0,0) + Mask2*(0,1) + Mask3*(0,2) +

Mask4*(1,0) + Mask5*(1,1) + Mask6*(1,2) +

Mask7*(2,0) + Mask8*(2,1) + Mask9*(2,2) ) /Sum(Mask)

這是第一次遮罩的運算

上述座標為圖片的座標點

運算出結果後,將結果放置新圖片(1,1)這點上,後將遮罩器右移 成

(Mask1*(0,1) + Mask2*(0,2) + Mask3*(0,3) +

Mask4*(1,1) + Mask5*(1,2) + Mask6*(1,3) +

Mask7*(2,1) + Mask8*(2,2) + Mask9*(2,3) ) /Sum(Mask)

運算結果放置新圖片(1,2)的點上....

以此類推將整張圖片掃過。

此方法由(1,1)開始放入像素點,所以圖的四個邊緣,會因沒有放入數值,而呈現白色狀態.
以下為成果照片...




遮罩後,與原圖的差異性不大,但仔細看後,還是會有稍微的不同...

2009年12月12日 星期六

HW4 Gamma Correction


(a)Gamma=0.3


(b)Gamma=4


這次的作業是Gamma轉換
理論上不難,經過一個簡單的公式套一套帶入後,再把運算過後的RGB值輸出。
就可以得到經過轉換後的圖片。
比較值得注意的是,公式中的常數值,以及Edit->text的型態轉換,這讓我花的時間反而比較多
~"~

HW3 Histogram

這一次的作業是在Image上畫出直方圖來表示一張圖片的RGB值。

以下是我的作業結果


(a)R值的直方圖



(b)G值的直方圖



(c)B值的直方圖



(d)R,G,B值的直方圖



這直方圖主要是用到move to跟line to這兩個函式去在Image上面畫出一條條的直線。
所以重點在move to(int x,int y)跟line to(int x, int y)裡面的X和Y值的參數。
這裡面的參數必須得要去抓取圖片裡面的RGB值,然後做一些比例的調整。
在使用BCB內建的畫筆(Image1->Canvas->Pen->Color=XXX;)去畫出線條。

但是拖這麼久沒交的原因,主要不在於這直方圖的製作。
是因為之前老師有提到page control,所以我就想嘗試著把之前學到的彙整成一個project


(e)整合後的程式-浮水印

在這整合的其中,就發生了一些BUG。
像是浮水印
當兩張圖片不一樣大小的時候,Image2長寬>Image1長寬的時候,會有一些錯誤






(f)浮水印問題

這問題就只出現在上述的狀況下。
我有想過解決的方法,好像有一種方法可以依照圖片邊緣的RGB值向外擴大。
如果可以將兩張圖片經過擴大後,變成大小都一樣的話,那可能問題就解決了。
不過,要如何去寫出這樣的程式,我就一直都沒寫出來,所以就一直拖延到現在了。

2009年10月11日 星期日

Hw2

1011

這次作業是做旋轉,之前在多媒體概論的時候有自己做過90度跟180度的旋轉。
所以自以為的這次的也應該不會太難.....但是在實做的時候發現有很多的東西要考慮。
首先是旋轉的角度,怎麼樣在旋轉過後讓圖片完整呈現出來。
再來是第二個陣列的容納量可否容納的下旋轉過後的長跟寬。這都是必須要去考慮的~"~
實際打了程式試驗完以後,卻發現圖片是旋轉了但是有被剪掉的和重複到的地方。

問題:

圖片重複的地方我猜測是演算法的錯誤,因為我在裡面有用到abs函數,所以數值有可能重複。

而被cut掉的地方我想用圖片的位移不知道能不能解決.....

待續@_@~


1015

經過幾次的測試....它終於可以正常旋轉了....
在程式碼方面,跟上一個圖案的差異性滿大的。
首先,因為之前是拿第一個作業的程式碼下去改寫的,所以一直陷入去對RGB陣列的元素做運算的迴圈。後來才想到,其實好像不用,只要把圖片的點旋轉就好,不需要用到RGB。

再來是使用cos sin函數 發現其實只要直接使用include裡面的math就可以使用cos跟sin這兩個函數了= = 不用自己在那裏亂算~"~

因為我是直接使用Image1->Canvas->Pixels[j][i]=Image2->Canvas->Pixels[j][i] 所以圖片在旋轉後多出原始圖片長寬的部分就被剪掉了@_@~這方面還沒做改進。

剩下的就是數學的公式了~旋轉的角度以及旋轉後的位置都是要考慮的因素~不然圖片會處理完後會亂跑= =

還有一個問題就是.....轉完以後顏色會稍微失針@@~~這我就不知道怎麼解決了~"~

2009年10月1日 星期四

HW1



這次的作業在之前的課裡有上過,不過有些還是略微忘記@_@。

不過還是努力打出來了~~

大致上是先建立一個二維陣列來放圖片的RGB值,再用一個雙層迴圈把RGB值讀出放到edit中顯示出來。

因為一直不確定圖片的真實RGB值是多少...所以一直在嘗試著把圖案的R質萃取出來。

但是一直無法成功....所以就漸漸懷疑自己寫的程式是不是有誤

經過找尋和debug後,才發現原來在設定的時候沒有把圖案的高跟寬取出...所以才會無法成功。

後來設定好以後就可以萃取出R值了。

(第二張圖片是剛開始錯誤的程式所做出來的成果,第一張圖片則是修改後的成果順便附上萃取出R值的圖案)