s1071533 作業3
作業說明
開發環境
- Windows 10
- Python 3.10.2
- OpenCV 4.5.5
- Numpy 1.22.2
- Matplotlib 3.5.1
執行指令
python dft.py 圖片名稱
參數功能
- [圖片名稱] 輸入圖片位置及名稱
實作流程
從參數讀取檔案名稱並且使用灰階方式讀入圖片,進行傅立葉轉換分別取出頻譜大小與相位角度數值並表示成灰階圖片,接下來產生Gaussian Low-Pass filter的函數,並乘以頻譜大小,接著做反向傅立葉轉換。
python dft.py 圖片名稱
從參數讀取檔案名稱並且使用灰階方式讀入圖片,進行傅立葉轉換分別取出頻譜大小與相位角度數值並表示成灰階圖片,接下來產生Gaussian Low-Pass filter的函數,並乘以頻譜大小,接著做反向傅立葉轉換。
線條自畫像 (二值化與邊緣偵測)
以灰階模式讀取一張圖像,利用 Sobel Operators 偵測並輸出邊緣成分圖,並設計一個類似素描線條的自畫像圖案。
減少雜訊和平滑圖像
使用GaussianBlur('圖像名稱', Filter_Size, 0)高斯綠波函式將圖片進行濾波操作(平滑、過濾以及去噪);Filter_Size為3x3。
邊緣偵測
以Sobel Operator索伯算子,分別以水平及垂方向取值,計算出邊緣像素。取值方式為以該Pixel為中心點,九宮格範圍內之其餘八個Pixel值做運算取得其Pixel值。
使用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 Operators偵測並輸出邊緣成分圖以及負片後的類素描圖。
作業說明:
撰寫一個程式,以灰階模式讀取一張圖像 imread(path, IMREAD_GRAYSCALE) (a)利用 Sobel Operators 偵測並輸出邊緣成分圖 (b)設計一個類似素描線條的自畫像圖案。
環境:
Ubuntu-20.04
Vim 8.2
CMake 3.16.3
OpenCV 4.2.0
程式功能:
1. imread()讀圖片
2. 高斯模糊去噪
3. Sobel operator取得grad_x, grad_y,convertScaleAbs x and y,再用addWeighted合成
4 . THRESH_BINARY_INV做二值化,再做一次高斯模糊
5. Imshow、imwrite展示、儲存圖片
使用指令:
make ; ./hw3 picture_name.jpg
· Windows 10
· Visual Studio 2019
· OpenCV 4.5.5
· C++
一、作業說明
撰寫一個程式,以灰階模式讀取一張圖像imread(path, IMREAD_GRAYSCALE)
A. 利用Sobel Operators 偵測並輸出邊緣成分圖。
B. 設計一個類似素描線條的自畫像圖案。
二 、開發環境:
Windows10
Vscode
Python3.9.6
Opencv-Python_4.5.5.62
三、實作方法
1. 邊緣成分圖
i. 利用 imread 函數、IMREAD_GRAYSCALE參數讀取灰階圖片。
ii. 利用 Sobel 函數分別讀取x、y軸方向梯度。
iii. 利用 addWeighted 函數以等比例相加x、y方向,以變成邊緣成分圖。
2. 類似素描線條的自畫像圖案
i. 利用 GaussianBlur 函數取得雜訊。
ii. 利用 addWeighted 函數以5:-4的比例將圖片銳利化。
iii. 利用 threshold 函數將圖片二值化。
四、執行結果
(a) (b)