MATLAB中RGB通道图像的resolution、median等统计量计算异常排查
嘿,我来帮你搞定这个MATLAB图像统计量计算的问题!
问题根源:函数默认的计算维度不对
你遇到的median和四分位数输出大量数值的问题,本质是MATLAB的统计函数默认按列计算。比如你的R通道是一个M×N的二维矩阵,直接调用median(R)时,函数会对每一列单独计算中位数,最终返回一个1×N的数组——这就是你看到一堆数值的原因。四分位数的问题逻辑完全一致,quantile(R, 0.25)同样默认按列处理每一列的数值。
解决方案:计算全局统计量的两种方法
要得到整个RGB通道(整个二维矩阵)的统计值,你需要让函数对所有元素计算,这里有两种靠谱的方法:
方法一:扁平化矩阵(兼容所有MATLAB版本)
把二维通道矩阵转成一维向量后再计算,这是最稳妥的方式,不管你用哪个版本的MATLAB都能行:
close all; clc; clear all; % 导入图像并拆分RGB通道 img = imread('你的图像路径.jpg'); % 替换成你的图像路径 R = img(:,:,1); G = img(:,:,2); B = img(:,:,3); % 计算全局中位数 median_R = median(R(:)); median_G = median(G(:)); median_B = median(B(:)); % 计算下四分位数(Q1)、上四分位数(Q3) q1_R = quantile(R(:), 0.25); q3_R = quantile(R(:), 0.75); q1_G = quantile(G(:), 0.25); q3_G = quantile(G(:), 0.75); q1_B = quantile(B(:), 0.25); q3_B = quantile(B(:), 0.75);
方法二:使用'all'维度参数(MATLAB R2018b及以上版本)
如果你的MATLAB版本比较新(R2018b+),可以直接指定函数对所有元素计算,代码更简洁:
% 全局中位数 median_R = median(R, 'all'); % 全局四分位数 q1_R = quantile(R, 0.25, 'all'); q3_R = quantile(R, 0.75, 'all');
四分位距(Interquartile Span)的计算
四分位距就是上四分位数减去下四分位数,用上面得到的Q3和Q1直接相减就行:
iqr_R = q3_R - q1_R; iqr_G = q3_G - q1_G; iqr_B = q3_B - q1_B;
众数(Modus)的计算
和中位数、四分位数一样,mode()函数默认也按列计算,所以同样用扁平化或'all'维度来获取全局众数:
% 方法一:扁平化 mode_R = mode(R(:)); % 方法二:指定'all'维度 mode_R = mode(R, 'all');
分辨率(Resolution)的获取
图像的分辨率就是它的尺寸(宽×高),用size()函数就能直接拿到:
[img_height, img_width, ~] = size(img); % 通常分辨率表示为 宽×高,比如1920×1080 resolution = [img_width, img_height];
内容的提问来源于stack exchange,提问作者Franta
相关产品推荐
相关产品推荐

