顯示具有 s1081535 標籤的文章。 顯示所有文章
顯示具有 s1081535 標籤的文章。 顯示所有文章

2022年6月9日 星期四

s1081535 作業7

      

一、 作業說明 

  • 利用數學型態學影像處理運算(erode(), dilate()等函式),計算出所附圖像(共三張)每張圖像中圍棋個數

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

  • imread()以灰階形式讀取圖片,並使用threshold()函式進行二值化

  • getStructuringElement()函式,kernel為妥傭型態並將大小設為(10,10)

  • erode()函式對二值化圖片進行侵蝕,迭代次數一輸入圖像做調整

  • 再使用dilate()將侵蝕結果依kernel大小(30, 30)膨脹

  • findContours()函式對彭照後結果進行運算得出contours,並使用len(contours)得出棋子個數

  • drawContours()函式針對原圖畫出被偵測旗子之輪廓

四、 執行結果



實際顆數:24 / 測得顆數:21

實際顆數:31 / 測得顆數:31


實際顆數:31 / 測得顆數:31








2022年6月2日 星期四

1081535 作業6

     

一、 作業說明 

  • 基於Run-Length的壓縮,對圖檔作無失真壓縮後儲存成新檔案

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

  • Encode
    • 基於Run-Length的壓縮,對圖檔作無失真壓縮後儲存成新檔案

    • 使用cv2.imread()讀取圖片並利用cv2.split()將圖像分成B, G, R三個二維陣列

    • 使用flatten()將二維轉成一維

    • 分別進行RLE編碼存入npz檔案中

      1. 將原始[0, 0, 0, 255,255,255]編碼成[3, 3]與[0, 255]分別代表連續個數與像素之值
      2. 三通道編碼之值append()使用np.savez("image",compress_array)得到壓縮檔
    • 利用原始圖檔數據長度與壓縮後編碼長度,計算圖片的壓縮率及平均壓縮率

  • Decode
    • 使用file.open()file.read()讀取壓縮檔(.npz)

    • 進行RLE解碼,將相對應之值放入一維陣列,得到R, G, B通道解碼

    • 分別使用reshape(一維陣列, (w, h))將各通道資料轉成二維

    • 使用np.dstack()B, G, R通道合併,得到無失真壓縮解碼圖(.bmp)

四、 執行結果

img1(原圖VS壓縮並解碼後圖像)



img1(原圖VS壓縮並解碼後圖像)



img3(原圖VS壓縮並解碼後圖像)



平均壓縮率:8.786012692178309%





2022年5月19日 星期四

s1081535 作業5

    

一、 作業說明 

  • 擷取指定圖片的黃色花瓣區域

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

  1. 將圖片以RGB形式讀取。
  2. cv2.cvtColor(img, cv2.COLOR_BGR2HSV)將RGB圖轉換為HSV空間。
  3. 使用cv2.inrange()設定色彩的最低值與最高值製作Mask。
  4. 使用cv2.bitwise_and(),得出黃色花瓣區域。

四、 執行結果

原圖

HSV

Mask

Result







2022年4月14日 星期四

s1081535 作業4

   

一、 作業說明 

  • 計算輸入圖像的傅立葉轉換結果,以灰階256色圖像方式呈現出頻譜大小與相位角角度。
  • 利用Gaussian Low-Pass Filter對輸入圖像進行處理,並輸出平滑後圖像。

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

傅立葉轉換

利用 numpy.fft.fftshift (numpy.fft.fft2( input_image ) )計算二維離散傅立葉變換,並將zero-frequency 分量移動到頻譜的中心,得𝐹(𝝁, 𝜈)。

  • numpy.fft.fft2( ) 通過快速傅裏葉變換 (FFT) 計算 M-dimensional 數組中任意軸上的 n 維離散傅裏葉變換,默認情況下,變換是在輸入數組的最後兩個軸上計算的,即二維 FFT。
  • numpy.fft.fftshift( ) 為列出的所有軸交換half-spaces(默認為全部)。請注意,僅當 len(x) 為偶數時,y[0]才是奈奎斯特分量。

計算頻譜大小

根據頻譜大小計算公式,𝑆𝑝𝑒𝑐𝑡𝑟𝑢𝑚=|𝐹(𝝁, 𝜈)|,利用abs( 𝐹(𝝁𝜈) )得出頻譜大小。

  • 由於FFT計算完成後之結果高頻數據集中於中心,低頻數據分散於四角,需要透過numpy.log( )運算以顯示結果。

計算相位角角度

根據相位角角度計算公式,

使用numpy.arctan2( 虛部, 實部)再將結果單位弧度轉換為角度,得出最終結果。

高斯平滑處理

根據Frequency Filter步驟利用Gaussian Low-Pass Filter處理圖像。
  1. 輸入M*N的圖像
  2. 對該圖像做Zero-Padded,將圖像大小擴大成2M*2N (𝑓𝑝(𝝁, 𝜈) ),並將圖像保持在左上角
  3. 確保傅立葉轉換時頻譜置中,將𝑓𝑝(𝝁𝜈) 奇數點乘以-1
  4. 𝑓𝑝(𝝁𝜈) 做離散傅立葉轉換得到𝐹(𝝁𝜈)
  5. 計算𝐷(𝝁, 𝜈)與𝐻(𝝁𝜈),取得G(𝝁𝜈)
    • 根據兩公式,
    • 設定大小為2M*2N的Gaussian Low-Pass Filter並將中心點定位在M*N,得出𝐻(𝝁, 𝜈)。
    • 再根據公式,G(𝝁𝜈)=𝐹(𝝁𝜈)𝐻(𝝁𝜈)計算後得出G(𝝁𝜈)。
  6.  對結果做IDFT所得即為Gaussian Low-Pass Filter在頻域作用後的結果
  7. 將大小裁減為原始大小M*N,保留左上角圖像部分

*自己的方法*使用fftshift代替步驟2和3,利用Gaussian Low-Pass Filter處理圖像。

四、 執行結果

第一部分

第二部分





2022年3月24日 星期四

s1081535 作業3

  

一、 作業說明 

線條自畫像 (二值化與邊緣偵測

以灰階模式讀取一張圖像利用 Sobel Operators 偵測並輸出邊緣成分圖,並設計一個類似素描線條的自畫像圖案。

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

減少雜訊和平滑圖像

使用GaussianBlur('圖像名稱', Filter_Size, 0)高斯綠波函式將圖片進行濾波操作(平滑、過濾以及去噪);Filter_Size為3x3。

邊緣偵測

以Sobel Operator索伯算子,分別以水平及垂方向取值,計算出邊緣像素。取值方式為以該Pixel為中心點,九宮格範圍內之其餘八個Pixel值做運算取得其Pixel值。

  • 垂直取法是把九宮格內的每個Pixel乘上相對應的九宮格Vertical Sobel Mask後加總成為該Pixel的新值,以算出垂直梯度Gx的邊緣偵測。
  • 水平取法是把九宮格內的每個pixel乘上相對應的九宮Horizontal Sobel Mask後加總成為該Pixel的新值,以算出水平梯度Gy的邊緣偵測。

使用cv2.Sobel('圖像名稱', 圖像深度, dx, dy, Filter_Size),計算出X(垂直)與Y(水平)方向的梯度大小。

合併特徵圖

利用addWeighted()合併X和Y方向的梯度計算結果圖,得到輸出邊緣成分圖

顏色反轉

邊緣偵測所得到的點,進行顏色反轉。讀取每個圖元值P,再將255-P寫入新的空白陣列中,得到顏色反轉圖。

影像二值化

設定cv2.threshold('圖片名稱', Thresh_Value, Maxval_Value, 處理方法),讓線條明顯呈現以達成類似素描效果。

Canny邊緣偵測

使用cv2.canny('圖片名稱', minVal, MaxVal)。Canny演算法是一個複合性的邊緣偵測演算法,結合了Gaussian Filter梯度偵測、非最大值抑制、判斷邊界四個演算法去實踐邊緣偵測。

四、 執行結果

原圖

Sobel_X


Sobel_Y

Sobel_XY(使用addWeight()疊加)


Sobel_XY(使用Sobel()函式

顏色反轉

影像二值化(使用Binary Type)


影像二值化(使用Tozero Type)





Canny邊緣偵測

Canny邊緣偵測+顏色反轉





2022年3月10日 星期四

s1081535 作業2

 

一、 作業說明 

圖像旋轉 (Image Rotation)

撰寫一個程式,利用內建函式和自訂函式將一張圖像的整張圖像,以及自訂一函式將圖像中心內切圓區域,根據滑動條(trackbar)指定旋轉角度旋轉特定角度(逆時針旋轉 0 度至 359 )。 

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

建立Trackbar取得旋轉角度

  • 使用cv2.creatTrackbar('滑動條名稱', '顯示視窗名稱', 起始值(0), 最大值(359), 執行function),建立Trackbar,並設定其被滑動時應執行的函式。
  • 對應函式中,利用cv2.getTrackbarPos('滑動條名稱', '顯示視窗名稱')取得使用者指定之旋轉角度,供旋轉之用。

內建函式旋轉圖像

  • 透過cv2.getRotationMatrix2D(旋轉中心點, 旋轉角度, 旋轉後縮放大小)取得旋轉矩陣。
  • 根據旋轉矩陣對原始圖像進行仿射變換,達到旋轉效果。

自訂函式旋轉圖像

  • 利用雙重for迴圈,將原始位置之像素值複製至旋轉後對應空陣列的位置,達成撰寫自訂函式旋轉圖像之功能。
  • 以順時針而言,旋轉後像素位置之值隨"x'=x*cos(θ)+y*sin(θ)"以及"y'=-x*sin(θ)+y*cos(θ)"變動,若須逆時針轉動,將θ之值以0-θ取代之即可。

旋轉圖像內切圓區域

  • 延伸使用自訂函式旋轉圖像之功能,設置if判斷句檢視是否為內切圓範圍。是則取得旋轉後之像素值,反之則維持原始之值。
  • 使用畢氏定理(a2+b2 = c2)為內切圓範圍判定方法,設像素點距圖像中心點之水平距離和垂直距離為a與b,計算後所得若c值小於圖像"短邊/2"之值則為內切圓範圍,亦即須旋轉範圍。

四、 執行結果

利用內建函式旋轉之結果

橫向圖像

直向圖像



利用自訂雙重For迴圈函式旋轉之結果

橫向圖像

直向圖像



將圖像內切圓區域旋轉之結果

橫向圖像

直向圖像




2022年2月24日 星期四

s1081535 作業 1

一、 作業說明 

輸入指定圖片路徑和欲增加數值進行像素值調整。若圖片為灰階則調整整體數值;為彩色則只調整R值,並針對調整後溢位問題進行處理。

 作業環境

  • MacOS Monterey 12.2
  • PyCharm 2019.3.3
  • Python 3.8
  • OpenCV 4.5.5

 實作功能與方法

讀取指定名稱之圖片

  • 透過input()取得使用者指定之圖片名稱,再使用cv2.imread('檔案名稱/圖檔路徑'),以預設的彩色模式讀取放置在與.py檔之同層位置或指定路徑的圖檔。

判別讀入圖檔為全彩圖或灰階圖

  • 取圖檔中其中一個像素,以R, G, B三項數值是否相等作為判斷依據。若成立則為灰階圖,反之為全彩圖。

灰階圖像素質調整

  • 利用cv2.add( 原始圖片, numpy.array(欲增加數值))之方法進行調整,例:將整體像素質提高100可寫作,cv2.add(img, numpy.array(100))。
  • 利用numpy.clip(圖片, 0, 255),處理像素值溢位狀況。其處理方法為將小於0之數值調整為0,將大於255之數值調整為255。

全彩圖像素質調整

  • 利用'圖片'.shape取得圖片長與寬之值,以雙重for迴圈的形式針對每一個像素進行R值的調整。
  • 又因像素在調整後若產生溢位情形,則會以加總之值mod(%)256作為表示,例如:160+100=260,會以260%256=4表示。因此,在調整像素值之前須先確認是否會出現溢位的狀況,若有出現直接將小於0之數值設為0,大於255之數值設為255;反之則進行正常加法。

顯示結果圖與寫出圖檔

  • 以cv2.imshow('視窗名稱', 圖片)顯示調整後之結果圖。並設定cv2.waitkey(0)直到使用者按下鍵盤數字0則執行cv2.destroyAllWindows()關閉所有顯示視窗。
  • 使用cv2.imwrite('圖片名稱/圖片路徑', 圖片)之方法存取圖檔。


 架構流程圖


五、 執行結果

程式執行介面

bookGray.jpg(灰階圖) 執行結果

bookGray.jpg 結果比較

lennaRGB.tif (全彩圖) 執行結果

lennaRGB.tif 結果比較

自訂圖片(全彩長方圖) 

自訂圖片結果比較