在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
仿真结果: