matlab显示三种颜色RGB的直方图

文章介绍了在MATLAB中使用imread函数读取图像文件,并通过histogram函数分别对RGB通道进行直方图绘制,展示了两个实例,一个是逐通道绘制,另一个是彩色图像和灰度图像的综合处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在MATLAB中,一般使用 imread 函数来读取图像文件,然后使用 histogram 函数来绘制RGB通道的直方图。

实例1代码:

% 读取图像
img = imread('fft.png'); % 替换为您图像的路径

% 分离RGB通道
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);

% 绘制直方图
figure;
subplot(3,1,1); % 分割图形窗口
histogram(R(:), 'FaceColor', 'r'); % R通道
xlim([0 255]); % 设置x轴范围
title('R: range[0, 255]');

subplot(3,1,2);
histogram(G(:), 'FaceColor', 'g'); % G通道
xlim([0 255]); % 设置x轴范围
title('G: range[89, 255]');

subplot(3,1,3);
histogram(B(:), 'FaceColor', 'b'); % B通道
xlim([0 255]); % 设置x轴范围
title('B: range[146, 255]');

% 设置整个图形的标题
sgtitle('RGB Brightness Histogram');

% 设置整个图形的x轴标签
xlabel('RGB brightness');

% 设置整个图形的y轴标签
ylabel('Frequency number');

运行结果:

实例2代码:

function RGBVisualization
% 读取图像
pic=imread('fft.jpg');
% 将图像转换为灰度图(这一行被注释掉了,如果需要可以取消注释)
%pic=rgb2gray(pic);

% 初始化频率数组
FreqNum=zeros(size(pic,3),256);
% 计算每个颜色通道的像素值频率
for i=1:size(pic,3)
    for j=0:255
        FreqNum(i,j+1)=sum(sum(pic(:,:,i)==j));
    end
end

% 设置当前坐标轴
ax=gca;
hold(ax,'on')

% 如果图像是彩色的(有三个颜色通道)
if size(FreqNum,1)==3
    % 绘制红色通道的直方图
    rBar=bar(0:255,FreqNum(1,:));
    % 绘制绿色通道的直方图
    gBar=bar(0:255,FreqNum(2,:));
    % 绘制蓝色通道的直方图
    bBar=bar(0:255,FreqNum(3,:));
    % 设置各通道直方图的颜色和透明度
    rBar.FaceColor=[0.6350 0.0780 0.1840];
    gBar.FaceColor=[0.2400 0.5300 0.0900];
    bBar.FaceColor=[0      0.4470 0.7410];
    rBar.FaceAlpha=0.5;
    gBar.FaceAlpha=0.5;
    bBar.FaceAlpha=0.5;
    % 设置X轴标签
    ax.XLabel.String='RGB brightness';
    
    % 计算各通道的亮度范围并显示在图例中
    rrange=find(FreqNum(1,:)~=0);
    rrange=[num2str(rrange(1)-1),' , ',num2str(rrange(end)-1)];
    grange=find(FreqNum(2,:)~=0);
    grange=[num2str(grange(1)-1),' , ',num2str(grange(end)-1)];
    brange=find(FreqNum(3,:)~=0);
    brange=[num2str(brange(1)-1),' , ',num2str(brange(end)-1)];
    legend({['R: range[',rrange,']'],...
            ['G: range[',grange,']'],...
            ['B: range[',brange,']']},...
             'Location','northwest','Color',[0.9412    0.9412    0.9412],...
             'FontName','Cambria','LineWidth',0.8,'FontSize',11);
else 
    % 如果图像是灰度图(只有一个颜色通道)
    kBar=bar(0:255,FreqNum(1,:));
    kBar.FaceColor=[0.50 0.50 0.50];
    kBar.FaceAlpha=0.5;
    ax.XLabel.String='Gray scale';
    krange=find(FreqNum(1,:)~=0);
    krange=[num2str(krange(1)-1),' , ',num2str(krange(end)-1)];
    legend(['Gray: range[',krange,']'],...
           'Location','northwest','Color',[0.9412    0.9412    0.9412],...
           'FontName','Cambria','LineWidth',0.8,'FontSize',11);
end
% 设置图像的边框和网格
box on
grid on
ax.LineWidth = 1;
ax.GridLineStyle='--';
ax.XLim=[-5 255];
ax.XTick=[0:45:255,255];

% 设置X轴和Y轴的标签和字体
ax.XLabel.FontSize=13;
ax.XLabel.FontName='Cambria';
 
ax.YLabel.String='Frequency number';
ax.YLabel.FontSize=13;
ax.YLabel.FontName='Cambria';
end

 仿真结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值