编写Python实现直方图均衡化和大津阈值法,展示图片变化。 代码尽量体现出计算过程。
时间: 2024-09-28 12:13:33 浏览: 109
直方图均衡化是一种图像处理技术,用于增强图像对比度,使其细节更易辨认。大津阈值法则是一种二值化的简单方法。下面是使用Python的`skimage`库实现这两个步骤的示例:
```python
from skimage import exposure
import matplotlib.pyplot as plt
import numpy as np
# 假设我们有一个灰度图像数组
img = ... # 你可以替换为你的实际图像路径或者numpy数组
gray_img = img.astype(np.float64)
# 直方图均衡化
hist, bins = np.histogram(gray_img.flatten(), 256, [0, 256])
cdf = hist.cumsum()
cdf_normalized = cdf * float(hist.max()) / cdf.max() # 归一化累积分布函数
img_eq = np.interp(gray_img.flatten(), bins[:-1], cdf_normalized).reshape(gray_img.shape)
# 显示原图和直方图均衡化后的图
plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.imshow(gray_img, cmap='gray')
plt.title('Original Image')
plt.subplot(122)
plt.imshow(img_eq, cmap='gray')
plt.title('Histogram Equalized Image')
plt.show()
# 大津阈值法二值化
threshold, _ = thresholding.threshold_otsu(gray_img) # 使用Otsu算法找到阈值
binary_img = gray_img > threshold
# 显示二值化结果
plt.figure()
plt.imshow(binary_img, cmap='gray', interpolation='nearest')
plt.title('Otsu Thresholding Result')
plt.show()
```
在这个例子中,首先对图像进行直方图均衡化,通过计算每个像素灰度值的累积分布函数并将其转换回原始灰度范围得到增强后的图像。然后利用大津阈值法对图像进行二值分割,将像素分为背景和前景。
阅读全文