读入一幅图像,进行直方图均衡化处理,同屏显示原图像、均衡化处理后的图像,同屏 显示图像均衡化处理前后的直方图。matlab实现
时间: 2024-05-01 21:22:38 浏览: 47
下面是Matlab实现代码:
```matlab
% 读入图像
img = imread('image.jpg');
% 显示原图像
subplot(2,2,1);
imshow(img);
title('Original Image');
% 绘制原图像直方图
subplot(2,2,2);
imhist(img);
title('Original Image Histogram');
% 进行直方图均衡化处理
img_eq = histeq(img);
% 显示均衡化处理后的图像
subplot(2,2,3);
imshow(img_eq);
title('Equalized Image');
% 绘制均衡化处理后的直方图
subplot(2,2,4);
imhist(img_eq);
title('Equalized Image Histogram');
```
首先,我们使用`imread`函数读入一幅图像,并将其存储在`img`变量中。然后,我们使用`subplot`函数将图像及其直方图显示在同一窗口中。`subplot(2,2,1)`表示将图像显示在第一行第一列的位置上,`subplot(2,2,2)`表示将直方图显示在第一行第二列的位置上,以此类推。
接着,我们使用`imhist`函数绘制原图像的直方图。`histeq`函数用于进行直方图均衡化处理,得到均衡化处理后的图像,存储在`img_eq`变量中。最后,我们使用`imshow`和`imhist`函数分别显示均衡化处理后的图像及其直方图。
相关问题
python对图像进行直方图均衡化处理
使用Python进行图像直方图均衡化处理可以使用OpenCV库中的equalizeHist()函数。下面是一个示例代码:
```python
import cv2
# 读入图像
img = cv2.imread('image.jpg', 0)
# 对图像进行直方图均衡化处理
equ = cv2.equalizeHist(img)
# 显示原图和均衡化处理后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Equalized Image', equ)
# 等待按下任意键退出
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,首先使用cv2.imread()函数读入一张灰度图像,然后使用cv2.equalizeHist()函数对图像进行直方图均衡化处理,得到均衡化后的图像equ。最后使用cv2.imshow()函数显示原图和均衡化处理后的图像。注意,如果要处理彩色图像,可以先将彩色图像转换为灰度图像,然后再进行直方图均衡化处理。
对灰度图像进行直方图均衡处理matlab代码
以下是对灰度图像进行直方图均衡处理的MATLAB代码示例:
```matlab
% 读入灰度图像
img = imread('lena.jpg');
% 计算图像直方图
histogram = imhist(img);
% 计算累积直方图
cdf = cumsum(histogram) / numel(img);
% 对原图像进行直方图均衡处理
eq_img = uint8(255 * cdf(img + 1));
% 显示处理前后的图像
subplot(1,2,1), imshow(img), title('原图像');
subplot(1,2,2), imshow(eq_img), title('均衡化后的图像');
```
这段代码中,首先使用 imread() 函数读入一张灰度图像,然后使用 imhist() 函数计算图像的直方图。接着,使用 cumsum() 函数计算累积直方图,并将其除以图像像素总数得到概率密度函数。最后,使用 cdf() 函数将原图像进行直方图均衡处理,得到均衡化后的图像。最后使用 subplot() 和 imshow() 函数将处理前后的图像显示在同一窗口中。
需要注意的是,这里使用的 cdf() 函数和 cumsum() 函数是自己定义的函数,代码如下:
```matlab
function y = cdf(x)
y = zeros(size(x));
for i = 1:numel(x)
y(i) = sum(x(1:i));
end
```
```matlab
function y = cumsum(x)
y = zeros(size(x));
for i = 1:numel(x)
y(i) = sum(x(1:i));
end
```
这两个函数都是利用循环计算给定向量的累积和。在实际使用中,也可以直接使用 MATLAB 自带的 cumsum() 函数代替这两个函数。