2016-02-14 2 views
0

Я хочу найти размер изображения (высота, ширина и область) и сохранить значение размера в txt-файле. Я попробовал эту команду:Как сохранить размер изображения в txt-файле с помощью matlab

img = imread('TN4.jpg'); 
abu=rgb2gray(img); 
imwrite(abu,'abu.jpg'); 
cb=imclearborder(abu); 
imwrite(cb,'cb.jpg') 
thresh=graythresh(cb); 
b=im2bw(cb,thresh); 
imwrite(b,'b.jpg'); 
bw=bwareaopen(b,100); 
bwfill=imfill(bw,'holes'); 
imwrite(bwfill,'bw.jpg'); 

s = regionprops(bwfill,'BoundingBox'); 
out = bsxfun(@times,img,uint8(bwfill)); 
objects=cell(numel(s),1); 

for idx = 1:numel(s) 

    bb=floor(s(idx).BoundingBox); 

    objects{idx} = out(bb(2):bb(2)+bb(4), bb(1):bb(1)+bb(3),:); 

end 


k1=objects{1}; 
c1=rgb2gray(k1); 
t1=graythresh(c1); 
biner1=im2bw(c1,t1); 
[height, width] = size(biner1); 
a1 = bwarea(biner1); 
h1=height(biner1); 
w1=width(biner1); 

X = [(h1);(w1);(a1)]; 
save datagrading.txt X -ascii 

, но я получил предупреждение массаж

??? Index exceeds matrix dimensions. 

Error in ==> exercise at 35 
h1=height(biner1); 

кто может мне помочь? Спасибо

ответ

1

height и width являются скалярами еще (это похоже на меня ...) вы предполагаете, что они являются функциями .... нет, они не функционируют. Просто используйте height и width самостоятельно и поместить его в X матрицы:

[height, width] = size(biner1); 
a1 = bwarea(biner1); 
%h1=height(biner1); %// Remove 
%w1=width(biner1); %// Remove 

X = [height;width;a1]; %// Change 
save datagrading.txt X -ascii 

Поскольку у вас есть несколько объектов, и вы хотите, чтобы сохранить высоту, ширину и площадь этих объектов, просто цикл по каждому один, найти величины, вы желаете, поместить их в общую матрицу и сохранить его:

X = zeros(3, numel(objects)); 
for k = 1 : numel(objects) 
    k1=objects{k}; %// Change 
    c1=rgb2gray(k1); 
    t1=graythresh(c1); 
    biner1=im2bw(c1,t1); 
    [height, width] = size(biner1); 
    a1 = bwarea(biner1); 
    X(:,k) = [height;width;a1]; 
end 

save datagrading.txt X -ascii 

X теперь 3 x s матрицы, где s является общим ню mber объектов, которые у вас есть. Поэтому каждый столбец содержит высоту, ширину и площадь каждого объекта.

+0

спасибо. оно работает. , но, как видите, команды применяются только для одного объекта на изображении (k1 = objects {1}), в то время как у меня мало объектов. Я хотел сохранить все данные размера объекта в изображении в том же txt. что мне делать? –

+0

Вы можете перебрать все изображения, а затем сохранить всю матрицу. Я отредактирую свой пост. – rayryeng

+0

@ ZulfaLuthfi проверить мое редактирование. – rayryeng

-1

Вы объявили

[height, width] = size(biner1); 

Так height(biner1) будет относиться к biner1 -му элементу height, который не существует.
Вместо этого использовать X = [(height);(width);(a1)];.

Смежные вопросы