2017-04-18 2 views
0

avec ce code j'essaie de dire que si la distance entre les points de c et la ligne verticale de c est inférieure à 10 (par exemple) tout pixel qui contient cette distance est égal à 1. mais ce code me donne 1 pour tout la ligne verticale. Comment puis-je améliorer le code?Comment plier une distance?

clear all 
close all 

c=zeros(500,500); 
c(:,250)=1; 
dim=size(c); 

D = bwdist(cumsum(c, 2,'reverse')> 0, 'euclidean'); %Sorry I forgot 'reverse' 

c(200,400)=1; 
c(400,255)=1 
c(250,252)=1 
c(300,258)=1 
c(100,270)=1 
c(130,256)=1 
c(310,260)=1 
figure, imagesc (c) 

for i=1:dim(1) 
    for j= 1: dim(2) 
     if D(i,j)>0 & D(i,j)<10 
      c(i,j)=1; 
     end 
    end 
end 

figure, imagesc(c) 

Répondre

0

Je pense que votre fonction de distance euclidienne wasnt faire tout ce que vous vouliez. J'ai changé une ligne dans votre code pour faire ce que je pense que vous voulez faire. Je détecte des pixels et tracer une perpendiculaire à partir de ces pixels à la ligne verticale

clear all 
close all 

c=zeros(500,500); 
c(:,250)=1; 
dim=size(c); 

D = bwdist(cumsum(c, 2,'reverse')> 0, 'euclidean'); %Sorry I forgot 'reverse' 

c(200,400)=1; 
c(400,255)=1; 
c(250,252)=1; 
c(300,258)=1; 
c(100,270)=1; 
c(130,256)=1; 
c(310,260)=1; 
figure(1); 
imagesc (c); 

for i=1:dim(1) 
    for j= 1: dim(2) 
     if c(i,j)==1 && j~=250 
      c(i,[250:260])=1; 
     end 
    end 
end 

figure(2); 
imagesc(c); 
+0

Je viens de changer un peu le code pour inclure la distance de 10 que vous vouliez –

0

Je ne comprends pas ce que vous essayez de faire.

Dans un premier temps c est tous les zéros, en dehors de la ligne de ceux à 250. Le cumsum change la ligne de ceux en 1..500 mais > 0 change nouveau dans les ... seulement: -S

Vous mettez à jour caprès calculant D. Est-ce votre problème? A côté, les boucles sont lentes, complexes et pas nécessaires. Essayez quelque chose comme ceci:

c(D > 0 & D < 10) = 1; 
+0

par exemple si l'on prend le point c (250252): Je veux dire que les points entre c (250250) et c (250252) wil égale à 1 et non à 0 (à la fin, cela équivaut à une ligne de 1 entre ces points)? Est-ce plus de compréhension? –