如何在Matlab中对不同图像中的对象数量求和?
how to sum the number of objects in different images in Matlab?
这是我的全部代码。我在这里所做的是尝试找到图像和我从图像中减去的模板之间的匹配点。
第一个循环和第二个循环从原始图像中提取所有卡片(第一张图像有一组卡片)
代码的下一部分只是找到提取的卡片和模板之间的匹配点。
我创建的最后一个 for 循环基于匹配点数的范围,我选择丢弃与模板匹配较少的卡片。(selectCard)
然后我创建了 (selectCard) 的 for 循环,并应用连接的组件来计算卡片上剩余的对象,当它们通过选择标准时。
所以我需要得到所有通过我所做的选择标准的卡片的对象总数。基本上,我得到了每张卡片的结果。不是所有的卡。我需要计算所有这些卡片的结果。
for j=1:max(max(LabeledImage))
[row, col] = find(LabeledImage==j);
len=max(row)-min(row)+2;
breadth=max(col)-min(col)+2;
Img=uint8(zeros([len breadth 3] ));
sy=min(col)-1;
sx=min(row)-1;
for i=1:size(row,1)
x=row(i,1)-sx;
y=col(i,1)-sy;
Img(x,y,:)=grayImage(row(i,1),col(i,1),:);
end
mytitle=strcat('Card Number:',num2str(j));
% figure,imshow(Img);title(mytitle);
Img=rgb2gray(Img);
pointsForSpade1 = detectHarrisFeatures(Img);
pointsForSpade2 = detectHarrisFeatures(Template_for_spade);
%extract neighborhood features
[featuresForSpade1,valid_pointsForSpade1] =
extractFeatures(Img,pointsForSpade1);
[featuresForSpade2,valid_pointsForSpade2] =
extractFeatures(Template_for_spade,pointsForSpade2);
%Match the features
indexPairs = matchFeatures(featuresForSpade1,featuresForSpade2);
%retrieve the locations of the corresponding points for each image.
matchedPointsForSpade1 = valid_pointsForSpade1(indexPairs(:,1),:);
matchedPointsForSpade2 = valid_pointsForSpade2(indexPairs(:,2),:);
% visualize the corresponding points.
figure,subplot(5,5,j)
showMatchedFeatures(Img,Template_for_spade,matchedPointsForSpade1,.....
matchedPointsForSpade2, 'montage');
count1 = matchedPointsForSpade1.Count;
%disp(matchedPoints1);
selectCard4 = find(count1>10);
Total = 0;
for e4= 1: selectCard4
figure, subplot(5,5,j)
showMatchedFeatures(Img(e4),Template_for_spade,matchedPointsForSpade1,...
matchedPointsForSpade2, 'montage');
title(Name);
% eliminate not needed hole on the card.
level = 0.57;
Img2 = imbinarize(Img, level);
%Morphological operation
ImgComp = imcomplement(Img2);
se = strel('disk', 10);
Iopened = imopen(ImgComp, se);
%figure;
%imshow(Iopened);
[Label3, numObject4] = bwlabel(Iopened);
TotalSpade = sum(numObject4);
s = sprintf('\n card number: of this set has #%s spades',j,
num2str(TotalSpade));
disp(s);
end
end
我想根据所选卡片显示连接对象的总和。
谢谢。
这里主要存在三个问题。首先,您初始化 Total = 0;
,然后将变量名称更改为 TotalSpade
。将初始化更改为:
TotalSpade = 0;
其次,对 TotalSpade
的赋值会覆盖之前的值。为了累加总数,您需要 add 到 TotalSpade
。另外,numObject4
是一个标量,所以 sum
什么都不做。
TotalSpade = TotalSpade + numObject4;
最后,如果您只想打印对象的总数,则需要将打印语句放在循环之外。您也可以使用 fprintf
而不是 sprintf
+disp
,因为如果您不指定文件描述符,fprintf
会打印到控制台。
for e4 = 1:selectCard4
...
end
fprintf('\n card number: of this set has #%s spades', j,
num2str(TotalSpade));
这是我的全部代码。我在这里所做的是尝试找到图像和我从图像中减去的模板之间的匹配点。
第一个循环和第二个循环从原始图像中提取所有卡片(第一张图像有一组卡片) 代码的下一部分只是找到提取的卡片和模板之间的匹配点。 我创建的最后一个 for 循环基于匹配点数的范围,我选择丢弃与模板匹配较少的卡片。(selectCard) 然后我创建了 (selectCard) 的 for 循环,并应用连接的组件来计算卡片上剩余的对象,当它们通过选择标准时。
所以我需要得到所有通过我所做的选择标准的卡片的对象总数。基本上,我得到了每张卡片的结果。不是所有的卡。我需要计算所有这些卡片的结果。
for j=1:max(max(LabeledImage))
[row, col] = find(LabeledImage==j);
len=max(row)-min(row)+2;
breadth=max(col)-min(col)+2;
Img=uint8(zeros([len breadth 3] ));
sy=min(col)-1;
sx=min(row)-1;
for i=1:size(row,1)
x=row(i,1)-sx;
y=col(i,1)-sy;
Img(x,y,:)=grayImage(row(i,1),col(i,1),:);
end
mytitle=strcat('Card Number:',num2str(j));
% figure,imshow(Img);title(mytitle);
Img=rgb2gray(Img);
pointsForSpade1 = detectHarrisFeatures(Img);
pointsForSpade2 = detectHarrisFeatures(Template_for_spade);
%extract neighborhood features
[featuresForSpade1,valid_pointsForSpade1] =
extractFeatures(Img,pointsForSpade1);
[featuresForSpade2,valid_pointsForSpade2] =
extractFeatures(Template_for_spade,pointsForSpade2);
%Match the features
indexPairs = matchFeatures(featuresForSpade1,featuresForSpade2);
%retrieve the locations of the corresponding points for each image.
matchedPointsForSpade1 = valid_pointsForSpade1(indexPairs(:,1),:);
matchedPointsForSpade2 = valid_pointsForSpade2(indexPairs(:,2),:);
% visualize the corresponding points.
figure,subplot(5,5,j)
showMatchedFeatures(Img,Template_for_spade,matchedPointsForSpade1,.....
matchedPointsForSpade2, 'montage');
count1 = matchedPointsForSpade1.Count;
%disp(matchedPoints1);
selectCard4 = find(count1>10);
Total = 0;
for e4= 1: selectCard4
figure, subplot(5,5,j)
showMatchedFeatures(Img(e4),Template_for_spade,matchedPointsForSpade1,...
matchedPointsForSpade2, 'montage');
title(Name);
% eliminate not needed hole on the card.
level = 0.57;
Img2 = imbinarize(Img, level);
%Morphological operation
ImgComp = imcomplement(Img2);
se = strel('disk', 10);
Iopened = imopen(ImgComp, se);
%figure;
%imshow(Iopened);
[Label3, numObject4] = bwlabel(Iopened);
TotalSpade = sum(numObject4);
s = sprintf('\n card number: of this set has #%s spades',j,
num2str(TotalSpade));
disp(s);
end
end
我想根据所选卡片显示连接对象的总和。
谢谢。
这里主要存在三个问题。首先,您初始化 Total = 0;
,然后将变量名称更改为 TotalSpade
。将初始化更改为:
TotalSpade = 0;
其次,对 TotalSpade
的赋值会覆盖之前的值。为了累加总数,您需要 add 到 TotalSpade
。另外,numObject4
是一个标量,所以 sum
什么都不做。
TotalSpade = TotalSpade + numObject4;
最后,如果您只想打印对象的总数,则需要将打印语句放在循环之外。您也可以使用 fprintf
而不是 sprintf
+disp
,因为如果您不指定文件描述符,fprintf
会打印到控制台。
for e4 = 1:selectCard4
...
end
fprintf('\n card number: of this set has #%s spades', j,
num2str(TotalSpade));