顯示具有 03360440 曾郁凱 標籤的文章。 顯示所有文章
顯示具有 03360440 曾郁凱 標籤的文章。 顯示所有文章

2016年12月23日 星期五

03360440曾郁凱HW06

作業內容: 色彩模型

YUV色彩模型 , Y代表亮度(luminance) , U,V代表彩度(chrominance)

1.  用TrackBar元件,固定住亮度Y,然後產生UV平面

程式碼 :


結果 :

  
                                  

                              Y = 195  (圖1)                                                                              Y = 66  (圖2)

2. 利用MouseDown事件,讓使用者選擇喜好的色彩,產生色彩條,已做後續步驟

程式碼 :

   結果 :

         
                                       

                         (218,137,98)色彩 (圖3)                                                        (218,15,237)色彩 (圖4)

3. 根據所選色彩值改變原始圖片

程式碼 :
上述之程式碼註解部分為轉灰階,也可以把註解打開,先轉灰階後再上色,但其實不用!

結果 :

原始影像(圖5)


處理過後(圖6)


原始影像(圖7)


處理過後(圖8)


原始影像(圖9)


處理過後(圖10)

所挑選的顏色(圖11)



使用圖11顏色處理過後(圖12)

心得 :
         
         透過這次的作業了解到YUV色彩模型,還有YUV和RGB之間的轉換,
          
         而Y代表的是亮度,所以從圖1,圖2可以看出Y越大色彩越亮,也可以

         發現到越偏向外緣的顏色越鮮豔(圖3 vs 圖4),根據自己所選擇的顏色

         加入原本的相片後,感覺照片變得更好看,也有不同的感受,而有時

         所選擇的顏色,加上去後,會感覺顏色不太對(圖11,12),那是因爲
         
         我們的Y是從原始圖上取,而UV平面則是固定的Y。



2016年12月17日 星期六

03360440曾郁凱HW05

作業內容 : Filter   (重新修改過!!)

Smoothing Spatial Filter  & Sharping Spatial Filter

使用 3 * 3 遮罩 來完成 平滑空間濾波器 和 銳化空間濾波器


3*3mask(圖一)

Smoothing Spatial Filter

主要用途 :模糊化 , 減少雜訊

觀念 : 中間權重較大,像素的色彩值被視為較重要
           
            離中間越遠,權重較小重要性低。

遮罩 : 
           
            
圖2
實驗 :                                                                             
                                   
                                                                                
        原影像(圖3)    


使用平滑濾波器後,模糊了一些(圖4)

Sharping Spatial Filter

主要用途 : 強化影像細節

遮罩 :
                            
                                                     圖5                                                        圖6
注意事項 :
                 
                 需要再加判斷防止小於0和超過255

                  if ( iSum > 255 )  iSum = 255;
                  if ( iSum < 0 )       iSum = 0; 
實驗 :


原始影像(圖7)


使用圖5遮罩處理後(圖8)


使用圖6遮罩處理後(圖9)

心得: 使用圖6遮罩,影像細節強化的較好(圖9vs圖8)

Median Filter 

主要用途 : 去除圖片雜訊

觀念 : 去除較為極端的點,透過中值濾波器取3*3遮罩裡的中位數,達到目的。


注意事項 : 
                 要使用內建sort()函數,須要#include<algorithm> 且 using namespace std

實驗  :

          首先讓圖3產生5%的雜訊




雜訊5%(圖10)


經中值濾波器處理後(圖11)


經平滑濾波器處理後(圖12)

          再來產生20%的雜訊


雜訊20%(圖13)


經中值濾波器處理後(圖14)

改為5*5遮罩處理(圖15)
心得 :
            
            上面的實驗可以觀察出,平滑濾波跟中值濾波同樣可以做雜訊的處理,
            
            但是平滑濾波器是將雜訊曠散開來(被均化),同時影像的邊緣部分也會
   
            受到影響,變得較平滑(圖12),而中值濾波器是把極值濾除,且邊緣保持

            較爲完整(圖11),但是如果雜訊過多或者說群聚範圍較大的雜訊,就無法完全
            
            濾除(圖14),因為雜訊變成了多數,如果要處理此狀況,可以增大遮罩的範圍(圖15)。  






         

2016年12月10日 星期六

03360440 曾郁凱 HW03

作業內容 : Level & Curve

1. Level


透過手動輸入改變 InputMax ,InputMin ,OutputMax ,OutputMin,調整照片色彩明暗度。

公式 :
           
                                                                                            OutputMax - OutputMin
          Output = OutputMin + ( Input - iInputMin) *            -------------------------------------
                                                                                             InputMax  -  InputMin
有幾點需要注意

1. 原影像色階若高於InputMax,則要讓它等於OutputMin,
     
     而原影像若色階低於InputMin,則要讓它等於OutputMax。

程式碼 :
             
              for ( j = 0 ; j < iImageHeight ; j++ )
                 {
                 bPtrImageRow = (Byte *) Image1->Picture ->Bitmap ->ScanLine[ j ];
                 bPtrNewImageRow = (Byte *) Image8->Picture ->Bitmap ->ScanLine[ j ];
                 for ( i = 0 ; i < iImageWidth ; i++ )
                    {
                    for ( k = 0 ; k < 3 ; k++ )
                       {
                       if ( bPtrImageRow[3 * i + k] > iInputMax )
                          bPtrNewImageRow [3 * i + k] = iOutputMax;
                       else if ( bPtrImageRow[3 * i + k] < iInputMin )
                          bPtrNewImageRow [3 * i + k] = iOutputMin;
                       else
                          bPtrNewImageRow [3 * i + k] = iOutputMin+
                          (bPtrImageRow[3*i+k]-iInputMain)
                          *((iOutputMax-iOutputMin)/(iInputMax-iInputMin));  
                       } 
                    }
                 }   

2. 上方底線的部分須注意,若一開始為將變數宣告成int 則影像會修改錯誤。

例子 :
原影像(圖一)


色階調整函數圖(圖二)

調整過後錯誤(圖三)

解決辦法 :
                 1.一開始就先宣告成float

                 2.或將上述程式碼畫底線部分改為

                    ( ( (float) iOutputMax - iOutputMin ) / ( iInputMax - iInputMin ) ) + 0.5

正確之影像(圖四)

3. 手動輸入 InputMax ,InputMin ,OutputMax ,OutputMin必須有防呆的部分。

4. 色階調整函數圖 (分三段畫)

部分程式碼 :
                     
                      Image9 -> Canvas -> MoveTo( 0 , 500 - 2 * iOutputMin );
                      Image9 -> Canvas -> LineTo( 2 * iInputMin , 500 - 2 * iOutputMin );
                      Image9 -> Canvas -> LineTo( 2 * iInputMax , 500 -2 * iOutputMax );
                      Image9 -> Canvas -> LineTo( 500 , 500 - 2 * iOutputMax );

2. Curve : 利用曲線來修改圖片

1 . 首先要修改曲線圖上的點,我們會用到Image事件MouseDown,藉由這個事件
     
    我們可以取得點的XY座標,把新座標帶入就能得到一些關係式
   
    Y = Y - 255;
   
    a =double( Y - X ) / ( X * X - X * 255 );

    b = double(1 - 255 * a );

2 . 改變原影像

部分程式碼:
    
                      for ( i = 0 ; i < iImageHeight ; i++ )
                         {
                         bPtrImageRow = (Byte *) Image8->Picture->Bitmap ->ScanLine[i];
                         for ( j = 0 ; j < iImageWidth ; j++ )
                            {
                            for ( k=0 ; k < 3 ; k++)
                               bPtrImageRow [ 3 * j + k ] = Curve[ bPtrImageRow[3*j+k] ];
                            }
                         }  
成果
 
 

曲線圖(圖五)


                                    調整後(圖六)                                    


曲線圖(圖七)


 調整後(圖八)

心得 :

Level 的部分套用上課推導出的公式,我們可以輕易的轉成程式碼,讓電腦幫忙計算,

並成功的調整照片色彩明暗度,而在Curve的部分我們可以比對圖六和圖八,兩張圖

分別為變亮和變暗,再觀察圖五和圖七,我們可以發現當曲線凹向下時,圖片整體會變亮,

而曲線凹向上則圖片整體變暗,而再這2次的作業裡,可以發現到影像處理的作業,基本上

都可以靠幾個迴圈就達成目的,只要對元件的操作用法熟悉,程式就能順利完成。



 



2016年12月2日 星期五

03360440曾郁凱HW02

作業內容 : 直方圖均化

這個作業可以分成幾個部分

1. 分別針對 BGR 三原色進行統計,製作影像直方圖

部分程式碼 :
   for (j=0;j<iImageHeight;j++)
      {
      bPtrImageRow = (Byte *)Image1->Picture->Bitmap->ScanLine[j];
      for (i=0;i<iImageWidth;i++)
         for (k=0;k<3;k++)
            iHistogram[ k ][ bPtrImageRow[ i * 3 + k ]  ]++;         
      }

2. 要了解畫筆(Pen)與刷筆(Brush)兩項元件,以便製作直方圖(Histogram)

重點 :
         一單位         : (畫布高度) / (統計出的最大值) 
         要畫的長度 :  一單位 * (0~255統計的數量)
        
3. 將直方圖轉為累積直方圖
部分程式碼 :
   for (j=1;j<256;j++)
      {
      for (k=0;k<3;k++)
         {
         iHistogram[ k ][ j ]+= iHistogram[ k ][ j - 1 ]; 
         }
      }

4. 直方圖均化

公式 =g(x, y) = cdf ( f(x, y) ) * 255
重點 :
         新的色彩值 = ( (目前累積的量)/(累積最大值) ) * 255
 部分程式碼 :
    for (j=0;j<iImageHeight;j++)
       {
       bPtrImageRow = (Byte *)Image1->Picture->Bitmap->ScanLine[j];
       bPtrImageRow1 = (Byte *)Image8->Picture->Bitmap->ScanLine[j];
       for (i=0;i<iImageWidth;i++)
          {
          bPtrImageRow1[3*i+0] = 新的色彩值[ [bPtrImageRow[3*i+0] ];
          bPtrImageRow1[3*i+1] = 新的色彩值[ [bPtrImageRow[3*i+1] ];
          bPtrImageRow1[3*i+2] = 新的色彩值[ [bPtrImageRow[3*i+2] ];
          }
       }  
實驗結果 :

圖片1 . 原始影像


圖片2 . 原始影像之直方圖



圖片3 . 直方圖均化後之影像


圖片4 . 處理後之直方圖

心得 : 
         我們可以觀察到圖片1和圖片3之間的差異,處理後的影像明顯的影像亮度更平均 ,

         而影像處理的程式通常都可以用幾個迴圈就達到目的,靠著其背後強大的演算法,

         這次的作業也是靠著一個簡單的公式,就能將圖片做直方圖均化,寫完非常有成

         就感,感覺能寫出功能簡單的Photoshop。
        
        

2016年10月5日 星期三

03360440曾郁凱HW01

Autodesk         Pixlr

介紹


Autodesk 大廠推出的拍照及影像後製軟體,它能拍攝重覆曝光,風格化藝術的照片,

藉由調整色彩,光影,對比,飽和,局部色彩,景深等功能讓照片變得更藝術獨特。


使 用 者 體 驗
       
照片顯示
主畫面
                          
讓 我 們 為 背 景 添 加 漂 亮 的 星 空                                            
                                        

左上角有橡皮擦的功能,底下能調整擦子大小,去除多餘的星星~


上方提供了返回鍵,讓使用者能對比前後的差異

完成圖
為 圖 片 添 加 風 格 ~

底下拉霸能調整此風格的透明度

心得

 這款app最大的特色就是,能讓你的照片瞬間變幻,充滿星空,而且介面親和,人人 都能輕鬆創造出獨一無二個人風格的照片。