s1093334 Homework #2

 

22 Digital Image Processing Assignment #2 報告

學號:1093334    姓名:黃芊瑜

主題邊緣偵測與圖像二值化

專案目標:

使用者輸入彩色圖片後可透過程式生成黑白輪廓線條圖案。

開發環境:

  • 用的作業系統:Windows
  • 開發環境:VScode
  • 用的套件:OpenCV version 4.9.0
  • 程式語言:Python 3.11.0

程式架構與功能說明:

此程式先在terminal讓使用者輸入欲處理的圖片檔名,輸入檔名後產生preview window,會顯示原始圖片和提供kernelSize、low_threshold、savefile三個trackbar讓使用者調整,更改trackbar的值後會跑出window顯示調整結果。


kernelSize trackbar
用來調整GaussianBlur的kernelSize參數值,數值越大,圖片會轉換得越模糊,可以讓output圖片的躁點降低,但也可能會讓照片的細節消失。


low_threshold
用來調整邊Canny的低閾值,如果計算結果比這個閾值高則會被偵測成邊緣。當low_threshold值較大時,偵測到的邊緣數量可能會減少,強度較低的邊緣可能會不見。


整個程式主要可以分成四個部分:

1.背景設定


2. trackbar設定


3.kernelSize_fun


4.adjust


    Why GaussianBlur? 
    opencv提供幾種模糊圖片的方式。

  • 平均模糊適合簡單的模糊處理
  • 高斯模糊適合平滑圖像並保留一定細節  >>此模糊方式較符合題意
  • 中值模糊適合去除隨機噪聲
  • 雙邊模糊適合保留圖像細節的平滑處理


    Why Canny?

  • Laplacian 適用於整體邊緣檢測和特徵提取
  • Sobel 適用於局部邊緣檢測並且可以指定不同方向
  • Canny 是一個綜合性較強的邊緣檢測方法,適合精確和高質量的邊緣檢測需求 >>此方式較符合題意


數學式:
cv2.GaussianBlur(gray_img, (kernelSize, kernelSize), 0)
透過此函數將圖片進行模糊
gray_img為欲模糊之圖片
kernelSize為高斯模糊中的核大小,需為奇數,大小越大,模糊程度越高
第三個參數為高斯核的標準差。設為 0,表示根據核大小自動計算標準差

cv2.Canny(blurred_img, low_threshold, low_threshold*2)
透過此函數將圖片進行邊緣偵測
blurred_img為欲邊緣偵測之圖片
low_threshold為邊緣偵測的低閾值,如果計算結果比這個閾值高則會被偵測成邊緣
low_threshold*2為邊緣偵測的高閾值,如果計算結果超過高閾值,則被視為強邊緣



成果展示:











留言

這個網誌中的熱門文章

rzwang Homework #1

s1093350 Homework #2

s1061637 作業6