在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

 仿真结果:

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐