Dimensions of arrays being concatenated are not consisten on workspace

2 ビュー (過去 30 日間)
fayza nayla
fayza nayla 2023 年 1 月 4 日
コメント済み: Voss 2023 年 1 月 4 日
i tried this code below and i still got an error and only load some images not all of them. every image has their own number of region so in one image, it could be 2, 3, or 6 areas.
or maybe if it's easier, how to just sum all of areas of each region in each image ?
clear;
folder_tbc = ('/Users/*/Documents/MATLAB/regionbased_seg/cv/TBC');
file_tbc = dir(fullfile(folder_tbc, '*png'));
jumlah_file_tbc = numel(file_tbc);
training_data_tbc = zeros(jumlah_file_tbc);
array = [];
for l = 1:jumlah_file_tbc
I = imread(fullfile(folder_tbc, file_tbc(l).name));
figure, imshow(I)
bw= imbinarize(I);
bw2 = imfill(bw,'holes');
s=regionprops(bw2, 'centroid', 'area');
centroids = cat(1, s.Centroid);
area = cat(2, s.Area);
hold on
plot(centroids(:,1), centroids(:,2),'r*')
[B,L]=bwboundaries(bw2, 'noholes');
[~,jumlah_file_tbc]=bwlabel(bw2,4);
for k=1:jumlah_file_tbc
%%for k=1 : size(bw2, 1)
boundary = B{k};
plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth',2)
text(boundary(1,2), boundary(1,1), strcat(['Area =', num2str(area(k))]),'Color', 'r', 'FontSize',15, 'FontWeight','bold');
%%end
end
array = [array;area];
cell_area(l,:) = {file_tbc(l).name, area};
hold off
end

回答 (1 件)

DGM
DGM 2023 年 1 月 4 日
Here, you're concatenating the object areas to form a variable-length row vector.
area = cat(2,s.Area);
Here, you're trying to vertically concatenate the variable length rows.
array = [array;area];
If you want to have an array where each row corresponds to each image, then you might use a cell array instead. It seems you already have that as cell_area. You could preallocate cell_area:
cell_area = cell(jumlah_file_tbc,2); % preallocate
As to what to do with "array", I don't really know why you need it if you have the results stored in cell_area. If you want to keep a running sum or something, you could do that in the loop or simply end concatenate all the variable-length area vectors and then sum it at the end?
  4 件のコメント
fayza nayla
fayza nayla 2023 年 1 月 4 日
it's still giving me the same error
Voss
Voss 2023 年 1 月 4 日
You also need to comment-out or delete the line:
array = [array;area];
because the idea was to replace "array" with "cell_area", since "array" cannot be built the way you want, since "area" is of varying length.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by