图像颜色直方图计算matlab代码
时间: 2023-09-16 12:11:59 浏览: 52
下面是一个计算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数,以获得所需的颜色特征。
相关问题
matlab颜色直方图代码
这段MATLAB代码用于绘制RGB颜色直方图:
```
clear;close all;clc;
f=imread('llama.jpg');
subplot(211); imshow(f);title('原图');
fcal=double(f);
[m,n,h]=size(f);
Y=zeros(h,256);
for k=1:h
for i=1:m
for j=1:n
Y(k,fcal(i,j,k)+1)=Y(k,fcal(i,j,k)+1)+1;
end
end
end
X=0:1:255;
subplot(212);
histogram=bar(X,Y);
axis([0 255,-inf inf])
xlabel('灰度级');ylabel('像素个数');
if h==3
title('RGB直方图');
set(histogram(1),'FaceColor',[1 0.1882 0.1882]);
set(histogram(2),'FaceColor',[0.5 1 0]);
set(histogram(3),'FaceColor',[0 0.5 1]);
hold on
plot(X,Y(1,:),'Color',[1 0.1882 0.1882]);
plot(X,Y(2,:),'Color',[0.5 1 0]);
plot(X,Y(3,:),'Color',[0 0.5 1]);
hold off
else
title('灰度直方图');
end
```
该代码首先读取图像`llama.jpg`,然后计算图像的RGB直方图。如果输入图像是RGB图像,则绘制RGB直方图,否则绘制灰度直方图。对于RGB直方图,分别为每个基色设置颜色,并添加轮廓。最后,使用`bar`函数和`plot`函数绘制直方图和轮廓。
图像增强局部直方图均衡化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('图像增强的局部直方图均衡化后的图像');
```
这段代码与前面的局部直方图均衡化代码类似,不同之处在于它处理了彩色图像,并对每个颜色通道分别进行均衡化。这样可以避免颜色失真的问题,并且提高了图像的对比度和清晰度。你可以根据需要调整块大小。