用python代码将AHE算法处理后的图像输出比原图像小一圈
时间: 2024-03-25 15:40:52 浏览: 53
在Python中使用OpenCV库可以很方便地实现AHE算法。以下是一个简单的示例代码,可以将AHE算法处理后的图像输出比原图像小一圈:
```python
import cv2
# 读取原始图像
img = cv2.imread('input_image.jpg', 0)
# 添加黑色边框
img = cv2.copyMakeBorder(img, 1, 1, 1, 1, cv2.BORDER_CONSTANT, value=0)
# 对图像进行AHE算法处理
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
img_ahe = clahe.apply(img)
# 去除黑色边框
img_ahe = img_ahe[1:-1, 1:-1]
# 显示处理后的图像
cv2.imshow('AHE Result', img_ahe)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,首先读取原始图像,并使用`cv2.copyMakeBorder`函数在图像边缘添加一个1像素宽的黑色边框。然后使用`cv2.createCLAHE`函数创建CLAHE对象,对图像进行AHE算法处理。最后通过切片操作去除黑色边框,得到处理后的图像。
相关问题
用python自己编写代码实现AHE算法并用plt输出
好的,AHE算法是一种自适应直方图均衡化的算法,可以增强图像的局部对比度。以下是一个用Python实现AHE算法的示例代码,并使用matplotlib绘制输出结果。
```python
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
def AHE(img, clipLimit):
img = np.array(img)
height, width = img.shape
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 计算累积分布函数
cdf = hist.cumsum()
cdf = (cdf / float(cdf[-1])) * 255
# 计算裁剪限制
clipLimit = clipLimit * (height * width) / 256
# 对像素值进行裁剪
for i in range(256):
if cdf[i] > clipLimit:
cdf[i] = clipLimit
# 重新计算累积分布函数
cdf = cdf.cumsum()
cdf = (cdf / float(cdf[-1])) * 255
# 映射像素值
img_eq = np.interp(img.flatten(), bins[:-1], cdf).astype(np.uint8)
img_eq = np.reshape(img_eq, img.shape)
return img_eq
# 读取图像
img = Image.open('lena.png').convert('L')
# 应用AHE算法
img_eq = AHE(img, clipLimit=4.0)
# 显示原始图像和均衡化后的图像
fig, axs = plt.subplots(1, 2, figsize=(12, 6))
axs[0].imshow(img, cmap='gray')
axs[0].set_title('Original')
axs[1].imshow(img_eq, cmap='gray')
axs[1].set_title('AHE')
plt.show()
```
在上面的代码中,我们使用PIL库读取图像,并使用AHE函数应用AHE算法。我们使用matplotlib库绘制原始图像和均衡化后的图像。
请注意,上述代码中的clipLimit参数控制裁剪限制。这是一个阈值,用于控制像素值的裁剪。较高的clipLimit值会导致更强的削弱效果,可能会导致图像的过度增强。
AHE算法代码 python
以下是AHE算法的Python代码实现:
```python
import cv2
import numpy as np
def AHE(img, win_size):
h, w = img.shape
img_AHE = np.zeros((h, w), dtype=np.uint8)
pad_size = win_size // 2
img_pad = cv2.copyMakeBorder(img, pad_size, pad_size, pad_size, pad_size, cv2.BORDER_REFLECT)
for i in range(pad_size, h + pad_size):
for j in range(pad_size, w + pad_size):
hist, _ = np.histogram(img_pad[i - pad_size:i + pad_size + 1, j - pad_size:j + pad_size + 1].ravel(), 256, [0, 256])
cdf = hist.cumsum()
cdf_min = np.min(cdf[cdf > 0])
img_AHE[i - pad_size][j - pad_size] = np.round(((cdf[img_pad[i][j]] - cdf_min) / ((win_size ** 2) - cdf_min)) * 255)
return img_AHE
img = cv2.imread("test.jpg", 0)
img_AHE = AHE(img, 50)
cv2.imshow("img", img)
cv2.imshow("img_AHE", img_AHE)
cv2.waitKey()
```
阅读全文