我根据图层A1和层次中心计算了图像A1与图像1,图像2,图像3和图像4等不同图像之间的距离。 dist_1_1 {ii}包含4个值。我想找到dist_1_1 {ii}中的最小值。但是我显示了值1,我还想显示给出最小值的图像。请帮我。提前致谢
%% demo
clc,clear all,close all
plotFlag = 1;
depth = 6;
alef1 = im2bw(imread('C1.bmp')); %% Binary image
vec1 = hierarchicalCentroid(alef1,depth,plotFlag);
% subplot(1,3,1);
A=[];
vec2=[];
dist_1_1=[];
for ii=1:4
A{ii} = imread(['image' num2str(ii) '.bmp']);
% subplot(1,3,2);
vec2{ii} = hierarchicalCentroid(A{ii},depth,plotFlag);
%subplot(1,3,3);
%vec3 = hierarchicalCentroid(tav,depth,plotFlag);
% vec4=hierarchicalCentroid(A,depth,plotFlag);
% vec5=hierarchicalCentroid(A,depth,plotFlag);
dist_1_1{ii} = sum((vec1 - vec2{ii}) .^ 2);
[~,I] = min(dist_1_1{ii});
figure;
subplot(1,2,1);imshow(alef1);
subplot(1,2,2);imshow(A{I});
end
答案 0 :(得分:1)
考虑到您的图片被命名为image1.png
,image2.png
,...
首先,将图像读取并存储在单元格中
for ii=1:n
A{ii} = imread(['image' num2str(ii) '.png']);
end
然后计算图像A1
与其他图像之间的相似度:
ind = computeSimilarity(A1,A); % here you compute the similarity and
(当然你需要一个for循环。)
将值存储在ind
向量中之后:
ind = [0.76,1.96,2.96];
然后找到最小值的索引并相应地选择图像
[~,I] = min(ind);
figure;
subplot(1,2,1);imshow(A1);
subplot(1,2,2);imshow(A{I});
您的代码应该纠正什么:
首先,避免在不需要时使用单元格,并在使用时正确定义单元格。您无法定义像A=[]
这样的单元格数组。你应该这样做:A=cell(2,3)
。例如,对于存储描述符的向量,您不需要单元格,只需将它们存储为矩阵,就像我一样。
其次,在此处发布代码时,请删除不必要的部分,例如注释图和命令。
然后,尝试按如下方式修改您的代码,我可能会对维度做出一些错误,但您可以获得主要想法。
并且还要记住,您不需要检查循环内的每个距离。首先计算向量,然后像我一样在一步中找到距离。
depth = 6;
alef1 = im2bw(imread('C1.bmp'));
vec1 = hierarchicalCentroid(alef1,depth,0);
A=cell(1,4);
vMatrix=zeros(4,length(vec1));
for ii=1:4
A{1,ii} = imread(['image' num2str(ii) '.bmp']);
vecMatrix(ii,:) = hierarchicalCentroid(A{1,ii},depth,0);
end
dist = sum((repmat(vec1,4,1) - vMatrix) .^ 2,2);
[~,I] = min(dist);