直方图重映射后生物图像特征差异的Matlab可视化方法咨询
问题原因说明
直方图重映射的本质是将所有样本的特征值全局分布强制对齐到同一个目标分布,因此所有样本的直方图必然完全一致。直方图仅统计不同特征值的出现频次,不记录特征的空间位置、不同位置的特征对应关系,自然无法体现类内、类间的特征差异,需要使用针对空间差异、样本间距离的可视化方案。
推荐的Matlab可视化方法
- 特征差值热力图
逐元素计算两个特征图的差值,通过热力图的亮度直观体现差异大小,同一主体的差值热力图整体亮度远低于不同主体的差值图,示例代码如下:
% 计算同一主体(图像21、22)的特征差值 diff_same_class = abs(filtered_image21 - filtered_image22); % 计算不同主体(图像21、63)的特征差值 diff_diff_class = abs(filtered_image21 - filtered_image63); % 并排对比显示 figure subplot(1,2,1) imshow(diff_same_class, []) title('同一主体特征差值热力图') colorbar subplot(1,2,2) imshow(diff_diff_class, []) title('不同主体特征差值热力图') colorbar
- 特征降维散点图
将所有样本的一维特征向量通过PCA或t-SNE降维到二维平面,同一主体的样本点会紧密聚集,不同主体的样本点距离较远,示例代码如下:
% 拼接所有样本的特征向量,每行对应一个样本 all_feature = [filtered_image21_vector; filtered_image22_vector; filtered_image63_vector]; % 样本标签:1为同一主体,2为不同主体 label = [1;1;2]; % PCA降维到2维 coeff = pca(all_feature); feature_2d = all_feature * coeff(:,1:2); % 绘制分类散点图 figure gscatter(feature_2d(:,1), feature_2d(:,2), label, ['r','b'], ['o','s']) legend('主体1','主体2') title('特征PCA降维散点图')
- 样本距离矩阵热力图
将所有样本两两之间的距离计算后绘制成热力图,类内区域的数值明显小于类间区域,和你计算的KNN距离完全对应,示例代码如下:
% 计算所有样本两两之间的欧氏距离 dist_matrix = pdist2(all_feature, all_feature); % 绘制热力图 figure heatmap({'21(主体1)','22(主体1)','63(主体2)'}, {'21(主体1)','22(主体1)','63(主体2)'}, dist_matrix) title('样本两两距离热力图') colorbar
以上三种方法都可以直观展示直方图重映射的效果,你可以根据自己的展示需求选择对应方案。
内容的提问来源于stack exchange,提问作者Noha
相关产品推荐
相关产品推荐

