一、实验目的:
1.掌握图像灰度变换原理。
2.理解图像直方图均衡化算法。
3.了解图像频域变换,并会观察频谱图。
二、实验环境
-
Python 3.x
-
OpenCV
-
NumPy
-
Matplotlib
三、实验内容与步骤
1. 读取并显示原始图像
使用OpenCV读取图像,并将其转换为灰度图像以便后续处理。
original_image_bgr = cv2.imread('your_image.jpg')
gray_image = cv2.cvtColor(original_image_bgr, cv2.COLOR_BGR2GRAY)
2. 显示灰度图像的直方图
使用Matplotlib绘制灰度图像的直方图,观察像素分布情况。
show_histograms([gray_image], ['Histogram of Grayscale Image'])
3. 图像灰度变换(点运算)
a. 亮度提升
bright_image = cv2.add(gray_image, 50)
b. 对比度增强
contrast_image = cv2.multiply(gray_image.astype(np.float32), 1.5).clip(0, 255).astype(np.uint8)
c. 伽马变换
gamma = 1.8
gamma_lut = np.array([((i / 255.0) ** (1.0 / gamma)) * 255 for i in range(256)]).astype("uint8")
gamma_corrected_image = cv2.LUT(gray_image, gamma_lut)
4. 图像代数运算
创建圆形掩膜,并进行加法、减法、与运算:
mask = np.zeros_like(gray_image)
cv2.circle(mask, center, radius, 255, -1)
added_image = cv2.add(gray_image, mask)
occluded_image = gray_image.copy()
occluded_image[mask == 255] = 0
roi_image = cv2.bitwise_and(gray_image, mask)
5. 直方图均衡化
对灰度图像进行直方图均衡化:
equalized_image = cv2.equalizeHist(gray_image)
6. 图像频域变换(傅里叶变换)
a. 傅里叶变换与频谱显示
dft = cv2.dft(np.float32(padded), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:,:,0], dft_shift[:,:,1]) + 1)
b. 低通滤波与图像重建
mask_lp = np.zeros((nrows, ncols, 2), np.uint8)
cv2.circle(mask_lp, (ccol, crow), 50, (1,1), -1)
fshift_lp = dft_shift * mask_lp
img_back_lp = cv2.idft(np.fft.ifftshift(fshift_lp))
四、结果分析
-
灰度变换:亮度提升使图像整体变亮;对比度增强使明暗对比更明显;伽马变换可调整图像的整体明暗分布。
-
代数运算:加法可用于图像叠加;减法模拟遮挡效果;与运算用于提取感兴趣区域。
-
直方图均衡化:均衡化后图像对比度增强,直方图分布更均匀。
-
频域变换:傅里叶变换将图像从空间域转换到频率域,低通滤波可去除高频噪声,实现图像平滑。
五、实验总结
通过本次实验,我掌握了以下内容:
-
图像灰度变换的基本方法及其效果;
-
图像代数运算的实现与应用;
-
直方图均衡化的原理与操作;
-
傅里叶变换在图像处理中的应用;
-
使用Python和OpenCV进行图像处理的基本流程。
305

被折叠的 条评论
为什么被折叠?



