使用直方图均衡化和自适应直方图均衡化分别对图像(Fig2-1)进行增强处理。注:直方图均衡化使用函数cv.equalizeHist( );自适应直方图均衡化使用的函数主要为cv2.createCLAHE()
时间: 2024-06-16 19:06:25 浏览: 157
直方图均衡化和自适应直方图均衡化是两种常用的图像增强方法,可以提高图像的对比度和细节。下面是它们的介绍:
1. 直方图均衡化:
直方图均衡化是一种全局的图像增强方法,通过重新分布图像的像素值来增强图像的对比度。它的原理是将图像的直方图变成一个均匀分布的直方图,从而使得图像中的像素值更加均匀分布。在OpenCV中,可以使用函数cv.equalizeHist()来实现直方图均衡化。
2. 自适应直方图均衡化:
自适应直方图均衡化是一种局部的图像增强方法,它将图像分成多个小区域,并对每个小区域进行直方图均衡化。这样可以避免全局直方图均衡化带来的过度增强或者细节丢失的问题。在OpenCV中,可以使用函数cv2.createCLAHE()来创建一个自适应直方图均衡化器,然后使用该均衡化器对图像进行增强处理。
相关问题
使用给定的夜景图像,分别进行直方图均衡化和自适应直方图均衡化,输出修改后的效果和直方图。代码和效果都用屏幕
好的,以下是使用Python和OpenCV库进行直方图均衡化和自适应直方图均衡化的代码和效果。
首先,我们需要导入必要的库和读入一张夜景图像。
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('night.jpg', 0)
plt.imshow(img, cmap='gray')
plt.show()
```
读入的夜景图像如下所示:
![image1](https://img-blog.csdn.net/20180713173810703?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bXhpYW5kaWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
接下来,我们可以使用OpenCV中的`equalizeHist()`函数对图像进行直方图均衡化。
```python
equ = cv2.equalizeHist(img)
plt.imshow(equ, cmap='gray')
plt.show()
```
直方图均衡化后的图像如下所示:
![image2](https://img-blog.csdn.net/20180713173929144?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bXhpYW5kaWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
我们还可以使用OpenCV中的`createCLAHE()`函数进行自适应直方图均衡化。这个函数可以自动根据图像的局部区域进行直方图均衡化,从而避免了全局直方图均衡化可能带来的过度增强的问题。
```python
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
clahe_img = clahe.apply(img)
plt.imshow(clahe_img, cmap='gray')
plt.show()
```
自适应直方图均衡化后的图像如下所示:
![image3](https://img-blog.csdn.net/20180713174124912?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bXhpYW5kaWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
最后,我们还可以绘制出原始图像、直方图均衡化后的图像以及自适应直方图均衡化后的图像的直方图。
```python
fig = plt.figure(figsize=(10,10))
# 原始图像
plt.subplot(2,2,1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
# 直方图均衡化后的图像
plt.subplot(2,2,2)
plt.imshow(equ, cmap='gray')
plt.title('Equalized Image')
plt.hist(equ.ravel(),256,[0,256])
# 自适应直方图均衡化后的图像
plt.subplot(2,2,3)
plt.imshow(clahe_img, cmap='gray')
plt.title('CLAHE Image')
plt.hist(clahe_img.ravel(),256,[0,256])
plt.show()
```
绘制出的直方图如下所示:
![image4](https://img-blog.csdn.net/20180713174303180?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2p1bXhpYW5kaWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75)
注意,在进行`plt.hist()`操作时,我们需要将图像的像素值展成一维数组。这可以通过使用`ravel()`函数实现。`256,[0,256]`表示我们希望将像素值划分到256个区间中,并在0到256之间进行划分。
I = imread('C:\Users\LENOVO\Desktop\医学图像处理\智能医学图像处理与分析课程设计\Fig0419(a)(chestXray_original).tif');%读入图像 % Igray = rgb2gray(I); %转为灰度图像 Ieq = histeq(I); %使用直方图均衡化增强对比度 sharp_filter = [0 -1 0; -1 5 -1; 0 -1 0]; Isharp = imfilter(Ieq, sharp_filter); %锐化处理增强边缘细节 figure;subplot(1,2,1); imshow(I);title('原始图像'); subplot(1,2,2); imshow(Isharp); title('处理后的图像'); 优化代码,使图像对比度高,边缘细节清晰
以下是优化后的代码,主要使用了自适应直方图均衡化和Unsharp Masking方法进行图像增强:
```matlab
I = imread('C:\Users\LENOVO\Desktop\医学图像处理\智能医学图像处理与分析课程设计\Fig0419(a)(chestXray_original).tif'); % 读入图像
Igray = rgb2gray(I); % 转为灰度图像
% 自适应直方图均衡化增强对比度
Ieq = adapthisteq(Igray);
% Unsharp Masking锐化处理增强边缘细节
h = fspecial('unsharp');
Isharp = imfilter(Ieq, h);
figure;
subplot(1,2,1); imshow(I); title('原始图像');
subplot(1,2,2); imshow(Isharp); title('处理后的图像');
```
经过优化后,图像对比度更高,边缘细节更清晰。
阅读全文