用matlab实现对图像直方图均衡
时间: 2023-08-26 18:27:20 浏览: 88
好的,我可以为您提供一个基本的Matlab代码实现直方图均衡化的方法:
```matlab
% 读取图像
img = imread('lena.jpg');
% 计算图像直方图
[h, w] = size(img);
hist = imhist(img);
% 计算累积分布函数
cdf = cumsum(hist)/(h*w);
% 计算直方图均衡化后的像素值
new_pixels = round(255*cdf(double(img)+1));
% 生成新的图像
new_img = reshape(new_pixels, h, w);
% 显示原始图像和直方图均衡化后的图像
subplot(1,2,1),imshow(img);title('Original Image');
subplot(1,2,2),imshow(new_img);title('Equalized Image');
```
在上述代码中,我们首先使用`imread`函数读取了名为lena.jpg的图像。接着,使用`imhist`函数计算了该图像的直方图。然后,我们计算了累积分布函数,并使用它来计算直方图均衡化后的像素值。最后,我们将新像素值重新整形为图像,并将原始图像和直方图均衡化后的图像显示在同一窗口中。
希望这可以帮助到您!
相关问题
怎么用matlab实现彩色图像直方图均衡化
以下是MATLAB代码实现彩色图像直方图均衡化:
```matlab
% 读入彩色图像
I = imread('color_img.jpg');
% 将彩色图像转为YCbCr颜色空间
I_YCbCr = rgb2ycbcr(I);
% 对亮度分量进行直方图均衡化
I_YCbCr(:,:,1) = histeq(I_YCbCr(:,:,1));
% 将YCbCr颜色空间转回RGB颜色空间
I_eq = ycbcr2rgb(I_YCbCr);
% 显示原图和直方图均衡化后的图像
imshowpair(I, I_eq, 'montage');
title('Original Image (left) and Equalized Image (right)');
```
其中,`rgb2ycbcr`和`ycbcr2rgb`函数用于RGB和YCbCr颜色空间之间的转换。在本例中,我们只使用了亮度分量(即Y分量)进行直方图均衡化,而保持色度分量(即Cb和Cr分量)不变,以保留图像的色彩信息。
matlab单一灰度图像直方图均衡化
以下是进行MATLAB单一灰度图像直方图均衡化的代码示例:
```matlab
% 读取图像
image = imread('image.jpg');
% 将图像转换为灰度图像
grayImage = rgb2gray(image);
% 计算灰度图像的直方图
histogram = imhist(grayImage);
% 计算灰度图像的累积分布函数
cdf = cumsum(histogram) / numel(grayImage);
% 对每个像素进行直方图均衡化
equalizedImage = cdf(grayImage + 1);
% 将图像转换为8位无符号整数类型
equalizedImage = uint8(equalizedImage * 255);
% 显示直方图均衡化后的图像
figure;
imshow(equalizedImage);
title('直方图均衡化后的图像');
% 显示直方图均衡化前后的直方图
figure;
subplot(2, 1, 1);
bar(histogram);
title('直方图均衡化前');
subplot(2, 1, 2);
bar(imhist(equalizedImage));
title('直方图均衡化后');
```
阅读全文