Borrar filtros
Borrar filtros

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 visualizaciones (últimos 30 días)
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

Respuestas (1)

Image Analyst
Image Analyst el 17 de Nov. de 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 comentarios
sassi nizar
sassi nizar el 18 de Nov. de 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 el 18 de Nov. de 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?

Iniciar sesión para comentar.

Categorías

Más información sobre Crystals en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by