在图的标题中显示所有预测及其百分比

问题描述 投票:0回答:1

我正在深入学习一个项目。我有两个变量用于存储预测及其百分比。这是通过对单元阵列C中的每个图像使用for循环来完成的。预测和百分比都存储在单独的列向量中,这些向量需要以后使用

for i=1:size(C)

img=im2uint8(C{i});
img2=imresize(img,[224 224]);
[prediction,pred_val] = classify(n_net,img2)
predictions(i,:)=prediction;
pred_vals(i,:)=pred_val;
figure
imshow(img2)

title(sprintf("%s %s",[labels,num2str(100*pravdepodobnost_predikciesnimky(i,:))]));
end

现在,我想显示所有的预测和百分比,所以假设网络预测图像由80%的海洋和20%的人组成,因此图中的标题显示的是两个预测​​,而不仅仅是主导预测。这是最好的方法吗?

编辑:这是一个澄清的示例(标题和标签是我的母语):

labels=string(categories(scenes_training.Labels)') %creates 1x2 string array
labels = 
"Pobrežie"    "Ulica"

从上面的for循环中迭代一次后,我得到了这个:

prediction = categorical
 Ulica

pred_vals = 1×2 single row vector    
0.0046    0.9954

和(修改后)一个figure

所以我的目标是写下这样的标题:

海岸0.45644%;街头99.5436%

matlab deep-learning classification figure
1个回答
0
投票

鉴于上述变量,您可以使用sprintf来做你想要的。

% Use the dummy data from above
labels = ["Pobrežie", "Ulica"];
pred_vals = [0.0046, 0.9954];
% now format a string to use as a title
img_title=sprintf("%s %s%%; ", [labels', num2str(100*pred_vals')]');
%img_title now equals "Pobrežie  0.46%; Ulica 99.54%; "

基本上sprintf将遍历它提供的所有值,重复字符串格式直到完成。您可以使用它来列出数据矩阵的内容。将数据放在矩阵中并对其进行转置只是交换名称和值的一种方式。

sprintf输入参数中的嵌套转置只是为了说服matlab正确处理不同的值类型 - 它有点hacky但是MATLAB经常是。如果我能找到更好的方法,那么我会更新答案。

如果你不想在字符串的末尾有最后的“;”,那么你可以用一个子步骤来修剪它。

© www.soinside.com 2019 - 2024. All rights reserved.