Azzera filtri
Azzera filtri

Attempted to access yC(3); index out of bounds because numel(yC)=2. Error in Contour2Area (line 24) s=(xC(2)-x​C(1))(yC(3​)-yC(2))-(​xC(3)-xC(2​))(yC(2)-y​C(1)); Error in test (line 34) [Area,Cent​roid]=Cont​our2Area(c​f);

3 visualizzazioni (ultimi 30 giorni)
function [Area,Centroid]=Contour2Area(C)
nC=length(C);
cc=1;j=1;
while cc<nC
ix(j)=C(2,cc);
cvec_start(j)=cc+1;
cc=cc+ix(j)+1;
j=j+1;
end
%--- find areas Ac and centroid Cxy (special if contour goes outside) ---
for j=1:length(ix)
xC=C(1,cvec_start(j):cvec_start(j)+ix(j)-1);
yC=C(2,cvec_start(j):cvec_start(j)+ix(j)-1);
if ~isempty(find(isnan(xC)))
if length(xC)>1
xC(find(isnan(xC)))=(xC(find(isnan(xC))-1)+xC(find(isnan(xC))+1))/2;
yC(find(isnan(yC)))=(yC(find(isnan(yC))-1)+yC(find(isnan(yC))+1))/2;
end
end
if length(xC)>1
Ac(j)=polyarea(xC,yC); % area
%--- determine clockwise/reverse sign, s
s=(xC(2)-xC(1))*(yC(3)-yC(2))-(xC(3)-xC(2))*(yC(2)-yC(1));
s=s/abs(s);
Cxy(:,j)=s*sum([(xC(1:end-1)+xC(2:end)).*(xC(1:end-1).*yC(2:end)-xC(2:end).*yC(1:end-1));...
(yC(1:end-1)+yC(2:end)).*(xC(1:end-1).*yC(2:end)-xC(2:end).*yC(1:end-1))]')'/...
6/Ac(j); % centroid (centre of mass)
nan0(j)=0;
else
Ac(j)=NaN;
Cxy(:,j)=[NaN;NaN];
nan0(j)=1;
end
%hold on;plot(xC,yC,'r.',Cxy(1,j),Cxy(2,j),'b*'); % plot polygons and centroids
end
%--- Remove NaN contours ---
nanix=find(nan0~=1);
Area=Ac(nanix);
Centroid=Cxy(:,nanix);
%--- Determine relationship between polygons (inside eachother?, parent/child) ---
IN=zeros(length(nanix),length(nanix));
for i=1:length(nanix)
i0=nanix(i);
xC=C(1,cvec_start(i0):cvec_start(i0)+ix(i0)-1);
yC=C(2,cvec_start(i0):cvec_start(i0)+ix(i0)-1);
for j=i+1:length(nanix)
j0=nanix(j);
IN(i,j)=inpolygon(C(1,cvec_start(j0)),C(2,cvec_start(j0)),xC,yC);
end
end
if true
% code
end
the program is:
imout=imread(['frame' num2str(25) '.jpg']);
n = 20;
% Divide into nxn images
s1 = [n*ones(1,floor(size(imout,1)/n)) mod(size(imout,1),n)];
s2 = [n*ones(1,floor(size(imout,2)/n)) mod(size(imout,2),n)];
C = mat2cell(imout, s1, s2);
c=1;
for i=1:size(C,1)
for j=1:size(C,2)
x=find(C{i,j});
if size(x)~=0
v(c,1)=i;
v(c,2)=j;
v(c,3)=sub2ind(size(C),v(c,1),v(c,2));
c=c+1;
end
end
end
for i=1:size(v,1)
cntr=C{v(i,1),v(i,2)};
cf=contourf(cntr,1);
[Area,Centroid]=Contour2Area(cf);
%g(i:size(Area),1)=sub2ind(size(C),v(i,1),v(i,2));
%g(i:size(Area),2)=Area;
end

Risposte (1)

Image Analyst
Image Analyst il 17 Nov 2015
There is no third element of yC. Why do you think there should be? Anyway, this link will definitely help you figure out why yC is not the size you think it should be: http://blogs.mathworks.com/videos/2012/07/03/debugging-in-matlab/
  4 Commenti
sassi nizar
sassi nizar il 18 Nov 2015
i have divided the image into blocks, and i want calculate in each block the area of the present blob. I am asking for the second if length(xC>1)
Image Analyst
Image Analyst il 18 Nov 2015
How are you defining the blob within the block? Are you thresholding the block? Like
binaryImage = thisBlock > someThresholdValue;
thisArea = sum(binaryImage(:));
What does xC represent? What does size(xC) report?
Why are you using contours? Wouldn't image analysis be easier?

Accedi per commentare.

Categorie

Scopri di più su Crystals in Help Center e File Exchange

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by