圖像變換: 空域與頻域
1. 空域轉換
- 定義: 直接在圖像的像素上進行操作。
- 優點:
- 直觀,容易理解。
- 計算上較為快速。
- 缺點:
- 對於頻率相關的特性不太敏感。
- 例子:
- 增強對比度、亮度調整等。
- Sobel、Prewitt、Laplacian 等邊緣檢測運算。
2. 頻域轉換
- 定義: 通過轉換,例如傅立葉轉換,將圖像從空域轉到頻域。
- 優點:
- 可以分析和操作圖像的頻率成分。
- 特定頻率的濾波或增強。
- 缺點:
- 較為抽象,初學者可能較難理解。
- 計算量相對較大。
- 例子:
- 低通、高通、帶通濾波。
- 去除圖像中的噪音或某些特定頻率的干擾。
建議:
- 依據應用需求選擇轉換方式。
- 空域轉換適合簡單、快速的圖像處理任務。
- 頻域轉換適合需要精細調整圖像特定頻率成分的任務。
策略:
- 如果您是初學者,先從空域轉換開始,建立基礎概念。
- 對於複雜的圖像分析任務,如頻率分析或特定頻率濾波,使用頻域轉換。
希望這樣的表格和解釋能夠幫助您更加了解空域與頻域轉換的差異和應用。
空域轉換: 亮度調整
import cv2
import numpy as np
# 讀取圖像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
# 亮度調整
brighter_image = cv2.convertScaleAbs(image, alpha=1.2, beta=50)
cv2.imshow('Original', image)
cv2.imshow('Brighter', brighter_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
頻域轉換: 低通濾波
import cv2
import numpy as np
def shift_dft(src, dst=None):
if dst is None:
dst = np.empty(src.shape, src.dtype)
elif src.shape != dst.shape:
raise ValueError("src and dst must have the same shape")
src_rows, src_cols = src.shape[:2]
# Split quadrants
dst[0:src_rows // 2, 0:src_cols // 2] = src[src_rows // 2:, src_cols // 2:]
dst[src_rows // 2:, src_cols // 2:] = src[0:src_rows // 2, 0:src_cols // 2]
dst[0:src_rows // 2, src_cols // 2:] = src[src_rows // 2:, 0:src_cols // 2]
dst[src_rows // 2:, 0:src_cols // 2] = src[0:src_rows // 2, src_cols // 2:]
return dst
# 讀取圖像
image = cv2.imread('path_to_image.jpg', cv2.IMREAD_GRAYSCALE)
# DFT
dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shifted = shift_dft(dft)
# 低通濾波
mask = np.zeros((image.shape[0], image.shape[1], 2), np.uint8)
r, c = mask.shape[:2]
center = (r // 2, c // 2)
radius = 50
x, y = np.ogrid[:r, :c]
mask_area = (x - center[0]) ** 2 + (y - center[1]) ** 2 <= radius*radius
mask[mask_area] = 1
# 應用濾波器並進行IDFT
fshift = dft_shifted * mask
f_ishift = shift_dft(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])
cv2.imshow('Original', image)
cv2.imshow('Low Pass Filter', img_back)
cv2.waitKey(0)
cv2.destroyAllWindows()