2010年11月5日 星期五

HW1



原圖



2色



4色


8色

16色


32色


64色


128色


256色

這是我第一次修有關影像處理類型的課程,也是我第一次接觸BCB這個軟體,現在還不是那麼的熟悉,不過我覺得它真的很好用。剛開始看到作業題目時,完全沒有頭緒,也不知道該如何做,之後聽到老師的講解,回家之後又問了同學,對色階的改變才有了了解。

舉例來說就是:2色圖就是兩種顏色, 所以就將RGB 的值分成兩區, 也就是將0-255分成 區, 0-127 跟128-255兩邊, 就會把圖變成只有兩色的圖了。

而四色的就是 將RGB分成4區, 所以就是 0-63、 64-127、 128-191、 192-255, 這四區最後圖就會變成四色的,其他的色階就依此類推。

之後再用程式判斷色彩,介於同一區塊的就會變為相同的值,





第一次作業


原圖


均化後









直方圖




心得 :

這次的作業是將原圖做均化和做出直方圖,過程中先用Canvas->Pen->Color設定畫筆
並且設定畫筆的起始位置(MoveTo)和要畫到的點(LineTo),然後就可以畫出直方圖,此部分比較簡單。

接著是均化,用ScanLine把RGB三種色彩值存起來,利用累加的方式,算出這個色彩值佔了幾%的面積,再將這個色彩值*255得到新的色彩值。

經由下面的演算法,畫出均化後的圖
for(i=0;iPicture->Bitmap->ScanLine[i]; bPtrResultImage = (Byte *)Image11->Picture->Bitmap->ScanLine[i]; for(j=0;j<1width;j++) for(k=0;k<3;k++) bPtrResultImage[j*3+k] = newtablelist[k][bPtrImage[j*3+k]];}


原本較暗的部分就會變亮,較亮的部分就會變暗。

HW1


原圖



256色


128色


64色


32色


16色


8色


4色


2色

第一次修和多媒體有關的課程且第一次使用BCB這套軟體,

所以一開始要做這作業時真的不知要從何做起,

不過今天經過與同學討論以及老師在下課前幾分鐘的講解,

我才知道原來能夠用之前轉換成灰階影像的程式碼去修改調色盤的部分,

而每個色階的區隔是以bit數來分,例如8色就是將0~255分成8區,

每一區包含32個來作為判斷色彩出現在哪一區中。

作業可以用BCB來做出各種不同bit值的變化真的還蠻有趣的。

HW01

首先是執行結果:
原圖
灰階

灰階128
灰階64
灰階32
灰階16
灰階8
灰階4
灰階2
老實說,看到這次的作業題目根本就不知道要從何寫起,運作出來的結果是看同學

的程式碼複製到自己的程式裡面執行出來的,但是有問同學原理是怎麼來的,

簡單來說就是將色階按照bit數設分區,如8bit就是將256分作八個區間,4bit就

是分作四區,2bit就是兩區,符合這個區間的色彩就自動變成同一值,隨著可以

使用的顏色越來越少,最後終至黑白,一開始也很直覺的以為可以用if來做判斷

,但隨著bit數的增加,到後期根本不可能設定那麼多,了不起到8bit就是極限了

,經過老師講解可以用數學式解決,才找到了新的出路,雖然程式不是自己寫出來

的,但有了解到運作的原理,下次會試著自己動手設計的。





HW1


原圖

2色


4色


8色


16色


32色


64色


128色

256色
心得:
  這次的作業真的一開始讓我想不出來怎麼打,老師一開始說要用老鼠走迷宮的方法,可是我怎麼試就是打不出來:(
  
  還想說要用另外一個ScrollBox來做,可是變成灰階影像後,讀不到那個灰階的色彩值,不知道BUG到底在哪裡,之後改一改有讀到,不過跑出來就是灰階影像,沒辦法變成2色的圖片!
  之後研究了半天,差點想放棄了呢!不過到了學校,跟同學研究,聽老師講解後,我終於聽清楚了!要把灰階色彩值分段後,在看圖片的灰階色彩值是落在哪個範圍,而決定是要什麼顏色!
  不過,我是用IF打的,所以2色,4色,8色打起來都還好,但是到了16色以後就真的打的快發瘋了!原本想要放棄了,因為128真的太浪費時間了!不過還是慢慢的打完了,沒有用老師最後教的方法,好在最後還是自己把作業做完了!
  這次有學到很多,從之前的一步一步做,有打基礎的感覺!所以其實有人教就通很快!

HW01

影像處理這門課的第一個作業---

影像的灰階量化。

----------原圖----------














----------------------
--------灰階256色--------














----------------------
--------128色----------














----------------------
---------64色----------














----------------------
---------32色----------














----------------------
---------16色----------














----------------------
---------8色-----------














----------------------
---------4色-----------














----------------------
---------2色-----------














----------------------
第一次做關於影像的作業,

感覺不是非常複雜,但是由於程式能力太弱~

很多地方一開始聽到的時候實在一頭霧水,

上了一段時間的課之後才比較了解是怎麼一回事。

這個程式在灰階部分為止主體上還是用老師提供的程式碼寫出來的,

至於量化的部分,直到昨天還是不太清楚,今天去上課老師特地重講了一遍,

才比較清楚,原來是這麼一回事!

主要是靠修改調色盤的方式,8-bit就把256分成7個區間,

看本來灰階影像的影像值落在哪個區間,再用一個特定數去取代他。

做下來的心得是2bit的最為簡單(當然),只要分成兩個區域!

128以下給他0、0、0,128以上給他256、256、256就搞定了~

不過也花了許多時間,因為程式一直出錯!在學校的寫bcb的寫法可執行,

回家後依樣畫葫蘆再寫一次就錯誤!

很多地方也是花了很多時間除錯,也翻了書以及上網查資料,

現在對於這個程式的寫法總算是比較熟悉一些了。

HW1

這是我第一次修與數位媒體相關的課程,除了在大一的計算機概論之後就幾乎沒碰過。言歸正傳,第一次的影像處理作業在我看來有棘手,雖然我上課都有在聽,可是都會聽得霧煞煞。因此寫作業之前我在網路上找了很多資料,卻一點感覺也沒有,最大的問題在於我對理論並不是很熟,所以我無從下手。之後我便向班上幾位同學討教,研究之後對程式碼比較有些概念,加上網路上的範例程式碼(非完整)很多可以參考,再慢慢對照著之前寫到一半的程式碼了解他是在做什麼功用。
例如調色盤的部分,一開始我完全不懂,自己查過之後又在奶昔的噗浪上看到李彥頡的提醒,慢慢的開始有些進展。星期五一開始上課老師就說要開放時間給大家討論作業,又看了作業部落格上的作業,加上老師又解釋了兩種寫作方式,第一種是針對調色盤去改變它的色素,第二種則是針對索引值去做改變。起初,我想從調色盤這邊下手,想了想實在是沒什麼頭緒,因此我轉變方向,我從索引值去做變化,剛好我在網路上查到一個也是針對索引值去改變的一段程式碼,我先從二階的下手,我將索引值分為變成0跟255,如此一來就完成了灰階二色的變化。依此類推的方式我依序完成了灰階4色以及灰階8色,到灰階16色的時候因為判斷式要有16組,我便開始動腦想看有沒有辦法簡化,因為如果真的去寫到16組甚至32、64.....組不是個聰明的做法,在寫作業的同時偶爾會聽到同學說用迴圈來寫的談話內容,於是我開始思考用迴圈要怎麼做,加上參考已經交的作業是以變數項來控制每個階段的數值。
寫到一半的時候,老師開始講解"四行程式碼"的作業範例,而我竟然要用到好幾十行甚至百行才有辦法解決,程式功力真的還不太行...。
回到家後我開始動工作業,一開始4色的用老師講解的程式碼成功了,但是後來灰階16色就出了點狀況變成(如圖-下中位置)。後來檢查程式碼後發現少了一個迴圈把調色盤的顏色變成8個色素,經過修改後也陸續完成了其他色階,如圖(依序為原圖>2色>4色>8色>16色>32色>64色>128色>256色)。
在上方提到我發現了錯誤為什麼會在16色的時候出錯而不是8色呢?(作業寫到這邊我才發現原來我4色的也寫錯了,因此我將上述解決的方式用在4色的程式碼裡完成下圖。)因為我想原始的想法保留起來,為什麼那麼長篇幅的程式碼可以縮短為簡單幾行,其實說簡單也沒有那麼容易,對於任何一個簡短的程式碼都要經過許多觀念、概念及多方面的思考才可以變得這麼簡潔有力。對於你想要寫甚麼程式想要做甚麼事情,都要有相當程度的理解,在這次作業上就是不夠了解才會毫無頭緒,當對要做的事情理解之後在寫程式上所花的時間真的快了許多。