Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我的主要问题是给定一个特征质心,如何在MATLAB中绘制它?
更详细地讲,我有一个NxNx3图像(RGB图像),它拍摄4x4块并为每个块计算6维特征向量。我这些特征向量存储在一个Mx6在其上我运行矩阵kmeans在一个功能,将获得的质心kx6矩阵,其中k是簇的数目和6是特征为每个块的数目。 我如何在图像中绘制这些中心簇以可视化算法是否按照我希望的方式执行?或者,如果有人对我如何可视化图像上的质心有其他方式/建议,我将不胜感激。 回答: 这是可视化群集的一种方法: 如您所述,首先提取块,为每个块计算特征向量,然后对该特征矩阵进行聚类。 接下来,我们可以可视化分配给每个块的聚类。请注意,我假设4x4块是不同的,这一点很重要,因此我们可以将这些块映射回原始图像中的位置。 最后,为了在图像上显示聚类质心,我只是找到与每个聚类最接近的块,并将其显示为该聚类的代表。 这是一个展示上述想法的完整示例(在您的情况下,您将希望通过自己的实现替换用于计算每个块的特征的函数;我只是将min / max / mean / median / Q1 / Q3作为每个4x4块的特征向量): %# params NUM_CLUSTERS = 3; BLOCK_SIZE = 4; featureFunc = @(X) [min(X); max(X); mean(X); prctile(X, [25 50 75])]; %# read image I = imread('peppers.png'); I = double( rgb2gray(I) ); %# extract blocks as column J = im2col(I, [BLOCK_SIZE BLOCK_SIZE], 'distinct'); %# 16-by-NumBlocks %# compute features for each block JJ = featureFunc(J)'; %'# NumBlocks-by-6 %# cluster blocks according to the features extracted [clustIDX, ~, ~, Dist] = kmeans(JJ, NUM_CLUSTERS); %# display the cluster index assigned for each block as an image cc = reshape(clustIDX, ceil(size(I)/BLOCK_SIZE)); RGB = label2rgb(cc); imshow(RGB), hold on %# find and display the closest block to each cluster [~,idx] = min(Dist); [rc] = ind2sub(ceil(size(I)/BLOCK_SIZE), idx); for i=1:NUM_CLUSTERS text(c(i)+2, r(i), num2str(i), 'fontsize',20) end plot(c, r, 'k.', 'markersize',30) legend('Centroids') ![]() ![]() 更多&回答... |
![]() |
![]() |