图像颜色直方图计算matlab代码
时间: 2023-09-16 20:11:59 浏览: 107
下面是一个计算RGB图像颜色直方图的Matlab代码示例:
```matlab
% 读入图像
img = imread('test.jpg');
% 计算颜色直方图
num_bins = 256; % 直方图的分bin数
hist_r = imhist(img(:,:,1), num_bins); % 计算红色通道的直方图
hist_g = imhist(img(:,:,2), num_bins); % 计算绿色通道的直方图
hist_b = imhist(img(:,:,3), num_bins); % 计算蓝色通道的直方图
% 显示直方图
figure;
subplot(2,2,1); imshow(img); title('原始图像');
subplot(2,2,2); plot(hist_r, 'r'); title('红色通道直方图');
subplot(2,2,3); plot(hist_g, 'g'); title('绿色通道直方图');
subplot(2,2,4); plot(hist_b, 'b'); title('蓝色通道直方图');
```
这个代码将会显示原始图像和每个颜色通道的直方图。你可以根据需要修改直方图的bin数,以获得所需的颜色特征。
相关问题
hsv颜色直方图matlab代码
在MATLAB中,计算Hue-Saturation-Value(HSV)颜色空间的直方图通常用于图像处理和分析色彩分布。下面是一个简单的示例代码片段,它展示了如何读取图像、转换到HSV颜色空间并创建直方图:
```matlab
% 导入图像
img = imread('your_image.jpg'); % 替换为你要处理的图片文件名
% 转换到HSV颜色空间
hsv_img = rgb2hsv(img);
% 提取HSV通道
h = hsv_img(:, :, 1); % Hue (色调)
s = hsv_img(:, :, 2); % Saturation (饱和度)
v = hsv_img(:, :, 3); % Value (亮度)
% 创建每个通道的直方图
figure;
subplot(3, 1, 1), hist(h, 'Normalization', 'probability');
title('Hue Histogram');
xlabel('Hue');
subplot(3, 1, 2), hist(s, 'Normalization', 'probability');
title('Saturation Histogram');
xlabel('Saturation');
subplot(3, 1, 3), hist(v, 'Normalization', 'probability');
title('Value Histogram');
xlabel('Value');
% 显示所有直方图
xlabel('Bins');
ylabel('Probability Density');
```
请注意,你需要将`'your_image.jpg'`替换为你实际要处理的图片文件路径。这个代码首先将RGB图像转换为HSV,然后分别提取Hue(色调)、Saturation(饱和度)和Value(亮度),最后对每个通道生成直方图。
图像增强局部直方图均衡化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('图像增强的局部直方图均衡化后的图像');
```
这段代码与前面的局部直方图均衡化代码类似,不同之处在于它处理了彩色图像,并对每个颜色通道分别进行均衡化。这样可以避免颜色失真的问题,并且提高了图像的对比度和清晰度。你可以根据需要调整块大小。
阅读全文