彩色图像直方图均衡化matlab代码
时间: 2023-10-17 10:22:27 浏览: 106
以下是彩色图像直方图均衡化的Matlab代码:
```matlab
% 读入彩色图像
img = imread('color_img.png');
% 将彩色图像转换为YCbCr颜色空间
img_ycbcr = rgb2ycbcr(img);
% 对Y通道进行直方图均衡化
Y = img_ycbcr(:,:,1);
Y_eq = histeq(Y);
% 将处理后的Y通道和CbCr通道重新组合成图像
img_ycbcr_eq = img_ycbcr;
img_ycbcr_eq(:,:,1) = Y_eq;
img_eq = ycbcr2rgb(img_ycbcr_eq);
% 显示原图和处理后的图像
subplot(1,2,1), imshow(img), title('原图');
subplot(1,2,2), imshow(img_eq), title('直方图均衡化后的图像');
```
其中,`color_img.png` 是待处理的彩色图像文件名。该代码将彩色图像转换为YCbCr颜色空间,对Y通道进行直方图均衡化,然后将处理后的Y通道和CbCr通道重新组合成图像,最终显示原图和处理后的图像。
相关问题
图像增强局部直方图均衡化matlab代码
以下是在Matlab中实现图像增强的局部直方图均衡化的示例代码:
```matlab
% 读取图像
img = imread('your_image.jpg');
% 设置每个小块的大小
block_size = 32;
% 获取图像的大小
[img_height, img_width, num_channels] = size(img);
% 计算图像中小块的数量
num_blocks_x = ceil(img_width / block_size);
num_blocks_y = ceil(img_height / block_size);
num_blocks = num_blocks_x * num_blocks_y;
% 初始化输出图像
out_img = zeros(size(img));
% 对于每个颜色通道
for c = 1:num_channels
% 对于每个小块
for i = 1:num_blocks_y
for j = 1:num_blocks_x
% 计算小块的边界
x_min = (j - 1) * block_size + 1;
x_max = min(j * block_size, img_width);
y_min = (i - 1) * block_size + 1;
y_max = min(i * block_size, img_height);
% 提取小块
block = img(y_min:y_max, x_min:x_max, c);
% 计算小块的直方图均衡化
block_eq = adapthisteq(block);
% 将均衡化后的小块写回输出图像
out_img(y_min:y_max, x_min:x_max, c) = block_eq;
end
end
end
% 显示原始图像和输出图像
figure;
subplot(1,2,1); imshow(img); title('原始图像');
subplot(1,2,2); imshow(out_img); title('图像增强的局部直方图均衡化后的图像');
```
这段代码与前面的局部直方图均衡化代码类似,不同之处在于它处理了彩色图像,并对每个颜色通道分别进行均衡化。这样可以避免颜色失真的问题,并且提高了图像的对比度和清晰度。你可以根据需要调整块大小。
matlab彩色图像直方图均衡化
彩色图像的直方图均衡化可以通过将RGB图像转换为HSV颜色空间,然后对亮度通道进行增强来实现。在Matlab中,可以使用rgb2hsv函数将RGB图像转换为HSV图像。然后,可以提取亮度通道(Value),对其进行直方图均衡化,最后将增强后的亮度通道重新合成为HSV图像,然后再转换回RGB图像。以下是一个实现直方图均衡化的示例代码:
```matlab
I = imread('D:\QQ接收文件夹\MobileFile\IMG_20191001_204030.jpg');
HSV = rgb2hsv(I);
V = HSV(:,:,3);
V = floor(V * 255);
V = histeq(V,256);
V = V / 255;
HSV(:,:,3) = V;
OutImg = hsv2rgb(HSV);
imshow(I);
title('原图像');
figure, imshow(OutImg);
title('直方图均衡化后的图像');
```
阅读全文