這次的作業是做直方圖和均化的處理。
一開始我先做均化的部分,在上課時老師講解均化的演算法,先把每個像數統計出來有幾個,再把他每一個分別累加起來存在陣列裡,之後再把累加的陣列去除以總共像數大小,變成機率之後再乘以255,之後再丟回去改掉原圖的每個像數,就可以了。不過打完這裡,我就卡住了,程式RUN下去的圖是黑的,所以我就針對統計、累加、新的像數這3個陣列去看,利用3個Memo去看每個陣列跑的時候,裡面的值是多少,最後我發現是換成新的像數這裡跑不出來,全部陣列的值都是0,而把累加陣列去除以所有像數數目,他這裡似乎都只取整數0,而下面的小數都沒有,然後就去乘上255,所以最後才會都黑色,經過朋友的指導,才知道要加一個Byte,而我的問題都沒了,結果也跑出來了,以下是找出問題解決後的程式碼。
而下面是我跑出來的結果,因為用其他的照片不知道對不對,所以就用老師的圖片去驗證,而左邊的直方圖,是還未均化的原圖,這是在做完直方圖作業後,就想說做一個原圖的直方圖把它列在旁邊。
均化做好後,我就卡住了,因為直方圖不太會,雖然看了老師的程式碼,用Moveto 和Lineto就好了,但那時還不懂他怎麼跑的,之後還是跑去問同學,經過他教導,我會用了,所以在跑上面那個直方圖時,我是先把他的畫布整個漂白後,再去畫每一條的線,這樣就好了,不過在此我也跑出一個小問題,我的直方圖特別的大,看到別人的比例怎麼都小小的,所以就去問了別人才知道可以用乘的方式把她的比例縮小,所以這個小問題又解決啦!!!以下是把畫布漂白畫直方圖和比例縮小的程式碼。
而下面的這個圖我是做彩色圖的直方圖,其原理也一樣,只差在他要把每個RGB統計出來,所以我又設了3個陣列分別去存放RGB的值,統計出來後就簡單啦!在畫線前只要把畫筆的顏色變換一下,就可以畫出不同顏色了,不過做到這裡RUN的時候,跑出了個小問題,當時在想怎麼都只有綠色和藍色而紅色不見了,一直抓BUG找不到,到最後才知道他3個顏色是重疊上去的,而我找的圖片綠色比較多,所以他把紅色都蓋掉了,所以我把這3個順序換了一下,這個直方圖就跑出來啦!!!
這次的作業做完後,感覺不難,而且程式碼是聽老師的演算法自己去摸索打出來,感覺有點小小的成就感,很多問題還是靠朋友而解決的,不過現在會打了,又學到了一樣東西,感覺很不錯。
沒有留言:
張貼留言