顯示具有 95360236 林興豪 標籤的文章。 顯示所有文章
顯示具有 95360236 林興豪 標籤的文章。 顯示所有文章

2010年1月17日 星期日

HW8

學習心得:

上完了這門課

覺得自己對於程式稍稍的有進步了

在課堂上

學到了相當多的影響處理方法

雖然有很多地方都是一知半解

但是能夠靠自己

借助老師跟同學們的力量

一點一點的把程式完成起來

總是會產生一股強烈成就感

完成了程式之後

跟之前所完成的部分

都有互補的作用

學到的東西也會越來越多

在這門課裡面

最大的收穫就是

對於一些影像的基本處理

能有非常深入的探討

然後得到的東西會非常的珍貴的

HW7

作業的主題是梯度銳化,梯度銳化就只是要去強調邊界的部分,藉由算出Gx水平差異和Gy垂直差異後,將其個別取絕對值後相加→G=|Gx| + |Gy| 後就可以得到我們要的結果。避免溢位(超過255設255,低於0設0,把所有值設定在0~255),要注意的地方就是彩色和灰階所使用的矩陣個數不同

GY = 銳利化矩陣(對Y維度的差異)*九宮格的色彩值
-1,-2,-1
+0,+0,+0
+1,+2,+1

GX = 銳利化矩陣(對X維度的差異)*九宮格的色彩值
-1,0,1
-2,0,2
-1,0,1

彩色原圖:


結果:


黑白原圖:
結果:

2010年1月6日 星期三

hw6

  這次的作業是空間濾波器的實作,要能由程式自行判斷處理灰階或彩色影像,
而且使用者可以輸入濾波器的值。

1.平滑化

就是中心點+8近鄰去平均再傳回,所以值會被周圍色彩值影響變的較為平滑。

(filter範圍內的值分別乘以filter範圍內的色彩值後相加)/filter值的和。

PS. filter值的和不為0

原圖:

3*3

1 1 1
1 1 1
1 1 1

結果:

2.銳利化

其實就是把前面所輸入的值改成總合為0,當抓取RGB色彩值時要轉成int再去做運算,

由於它是屬於+ - 運算,所以可能小值減大值,或大值+大值,發生溢位。

所以要記得收斂到0~255(就超過255就給255,低於0就給0)。

(filter範圍內的值分別乘以filter範圍內的色彩值後相加)

PS. filter內的值和要為0

3*3

-1,-1,-1
-1, 8,-1
-1,-1,-1

結果:


2009年12月16日 星期三

HW3

R:


G:


B:


R.G.B三個混合:



這次的作業是做出與photoshop相同功能的直方圖,內容真的很不簡單,

要先計算出RGB的分布,再來就是使用BCB的功能,將圖片畫出來。

剛開始一直卡在要如何將數值轉換成直線圖,而且要並排在一起,

最後還是參照別人的程式。直方圖主要是用到move to跟line to這兩個函式,

一開始必須要將RGB的直抓取出來,計算不同的RGB值的出現次數,

分別找出RGB個別出現次數的最大值,以最大值當分母,將各RGB值當分子,

乘上100%來求各個直線的比例,以避免超出你所設的Image的高。

然後在Image上面畫出一條條的直線,

Image3->Canvas->MoveTo(i,300)是用來決定起點位置,

Image3->Canvas->LineTo(i,300-t)是用來決定終點位置,

使用這兩個函式就可以將RGB的值轉換成直方圖了。

最後要分別出R.G.B三個顏色,使用Image1->Canvas->Pen->Color=XXX,

XXX分別代入RED.BLUE.GREEN就可以將線條的顏色改變了。

將前面部分完成之後,我還設定了3個按鈕,分別為R.G.B,

將程式碼分做3個部分,以顏色來區分,

點擊了之後就會依照所點擊的顏色畫圖,如果再點擊其他的顏色的話,

由於程式碼只有寫到畫圖的部分,所以會將原先的覆蓋上去,

最後一張圖就是顯示如果3個按鈕都點過一次的話,會將所有的分布顯示在一起。

這次的心得有學到將R.G.B的數值讀取出來,然後計算出現的個數,

最後使用MOVE TO以及LINE TO將線條畫出來,

還有Pen->Color來改變畫筆的顏色。

只是中位數以及其他老師所要求的部分,我實在是不知道要怎麼去取...

中位數的部分,我在想是不是將所有的點的分布,全部相加起來,

然後再除以總數?只是作起來好像怪怪的,所以就沒有把功能放上去了。

2009年12月11日 星期五

HW5

作業是將一張8位元的圖片,把每個位元都切出來得到一張圖,

一開始以為是要處理彩色圖片,完全不知道老師所講的8位元是在哪裡取得。

理解之後發現:位元平面的觀念基礎是將一個多準位(黑白或彩色)影像分解成一串二元影像,

而在256準位灰階影像中每個像素的強度由8位元所組成,

所以一張影像可看成8片重疊的影像切片。

低位元的平面提供影像中較精細的強度細節部分,

高位元的平面則包含視覺上的重要資料,圖片像素跟

00000001
00000010
00000100
00001000
00010000
00100000
01000000
10000000

這八個bit做and運算,除2取餘數出來不是1就是0,

再乘上255分成黑和白之後提取出像素質。


2009年11月28日 星期六

HW4

這次的作業是使用公式 S=C*(r^gamma),將圖片r經由gamma轉換,並將出來的值乘上常數C維持在0~255之間,得到新的圖片S。由於圖片轉換的時候,會出現黑色的部分無法改變顏色。(腰帶部分)
經過將像素全部往右邊移動後,得到的圖案有明顯的改善。

Gamma:0.2

Gamma:5

2009年10月24日 星期六

hw2













這次的作業主題我覺得困難的地方在於旋轉的數學公式:
X=X'*cosT-Y'*sinT
Y=X'*sinT+Y'*cosT
再來就是尋找中心點
還有就是BCB的使用方法,真的不好上手,對於不常使用視窗化程式的我, 在物件的地方思考了很久,最後發現只是單單的把值傳送過去而以。經由這次的作業,使我更加熟練程式的寫法。

2009年10月2日 星期五

hw1













程式部分:

首先先開啟一張bmp圖片
OpenPictureDialog1->Execute();
Image1->Picture->LoadFromFile(OpenPictureDialog1->FileName);

再來我要取得圖片寬高
Graphics::TBitmap *Bmp = new Graphics::TBitmap();
Bmp->Assign(Image1->Picture->Bitmap);
iImageHeight= Bmp->Height;
iImageWidth = Bmp->Width;

宣告三個二維動態陣列
try
  {
   ucMR = new unsigned char *[iImageHeight];
   for (j=0;jucMR[j] = new unsigned char [iImageWidth];
  }
 catch (std::bad_alloc)
  {
    ShowMessage("Could not allocate memory...Bye");
    exit(-1);
  }

取得圖片RGB值分別存入陣列
for(i=0;iHeight;i++)
  for(j=0;jWidth;j++)
    {
     ucMR[i][j] =GetRValue(Image1->Canvas->Pixels[i][j]);
    ucMG[i][j] =GetGValue(Image1->Canvas->Pixels[i][j]);
     ucMB[i][j] =GetBValue(Image1->Canvas->Pixels[i][j]);
    }

顯示RGB值輸出

if (Image1->Picture->Bitmap->Empty!=true)
 {                   
  Form1->Label1->Caption=AnsiString(ucMR[X][Y]);
  Form1->Label2->Caption=AnsiString(ucMG[X][Y]);
  Form1->Label3->Caption=AnsiString(ucMB[X][Y]);
 }

心得:

自己視窗化是用MFC,所以對BCB的用法不是很清楚,

但是在詢問過同學一些相關的語法之後,然後慢慢的熟悉系統,

覺得BCB比起MFC簡單很多。因為比起MFC需要拉起鏈結,

將有相關的部分連結起來才會驅動,而BCB只需要在要啟動的地方,

將程式碼打入,然後將要輸出的地方的名稱打入,

只是相關的語法需要特別的去查詢,但是比較起來,

整個介面就相對的陽春許多,比較起來會覺得BCB是給初學者使用的,

而MFC而是高手的進階版本。所以使用起BCB來對我來說是比較簡單的。

在整個程式的部分,需要先拉出開啟圖片的小方塊,

然後再拉出一個scroll box,並且在裡面放置一個picture的框架,

再拉出3個用來輸出R.G.B的框架,最後在設定一個按鈕,

並且在按鈕的地方雙擊兩下,程式就會自動建立好鏈結,

只要在裡面將前面所講到的程式碼放進去,

並且將輸出的檔案名稱以及R.G.B的框架對好,程式就算大公告成。

完成後將程式compile,點擊剛剛所設定好的按鈕,

並且選取需要讀取的圖片(p.s 圖片只能讀取bmp檔案),

最後總算能夠總算能夠把圖片讀出來了,目前還是需要摸熟BCB的系統才可以。