2016-02-14 179 views
0

我想要查找图像的大小(高度,宽度和面积)并将大小值保存在txt文件中。我试过这个命令:如何使用matlab保存txt文件中的图像大小

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

heightwidth标量,但(它看起来像我......)你是假设他们都是函数....没有他们不是功能。只需对自己使用heightwidth,并将其放置到您的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是总NU你有多少物体。因此,每列包含每个对象的高度,宽度和面积。

+0

谢谢。有用。 但是,如您所见,这些命令仅适用于图像中的一个对象(k1 = objects {1}),而我的对象很少。我打算将图像中的所有对象的大小数据保存在相同的txt中。我该怎么办? –

+0

您可以遍历每个图像,然后保存整个矩阵。我将编辑我的帖子。 – rayryeng

+0

@ZulfaLuthfi检查我的编辑。 – rayryeng

-1

你宣布

[height, width] = size(biner1); 

所以height(biner1)将引用的heightbiner1个元素,这是不存在的。
改为使用X = [(height);(width);(a1)];