Besoin d'aide pour stocker des valeurs aprés chaque itération dans une matrice

Signaler
-
 Omzo -
for i=1:size(g,1)
for j=1:size(g,2)

if g(i,j)==255;
x=i;
y=j;



plot(x,y,'r');



end

end
end
voila mon code et j'ai constaté il me donne les mémes valeurs de x et y à chaque fois alors je voudrais un tableau de valeur de x et y pour tracer y en fonction de x.

je sollicite de votre aide s'il vous plait.
merci d'avance,
cordialement,

3 réponses

Messages postés
15243
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2021
834
bonjour,
ton code ne fait pas ce que tu souhaites?
quel résultat obtiens-tu?
que souhaites-tu obtenir?
%%%IMPORTER TOUTES LES IMAGES QUI SE TROUVENT DANS LE DOSSIER TEST1


rep = 'C:\Users\33780\Desktop\NAVIER STAGE\12-03\test1\';% chemin vers le répertoire
ext = '*.tiff'; %extension des fichiers

chemin = fullfile(rep,ext); % chemin complet complet vers les fichiers

list = dir(chemin); % accés aus fichiers

for n = 1:numel(list) % boucle pour la lecture des images
a= imread(fullfile(rep, list(n).name), ext(3:end)); % lire les fichier


%%% FILTRER TOUTES LES IMAGES IMPORTEES PAR UN FILTRE MOYENNEUR

a=mean(a,3);
% Filtrage moyenneur

fx=[0 0 0;-1 1 0; 0 0 0];
fy=fx';
fm=[1 1 1 ;1 1 1 ;1 1 1]/9 ;% filtre moyeneur;
b=filter2(fm,a) ;gx=filter2(fx,b) ;gy=filter2(fy,b) ;
g=sqrt(gx.^2+gy.^2);


%%% BINAIRISER TOUS LES IMAGES APRES LE FILTRAGE

[l,p]=size(g); % matrice simple allant de 0 à 255;
s=6; % critére de binairisation qui va parcourir l'ensemble des cses de la matrice (seuillage);

x1=[]; % initialiser la variable x1;
y1=[]; % initialiser la variable y1;
k=1; % initialiser un compteur à 1;
%figure(1),imshow(g); % affiche l'image binairisée;


for i=1:l % on définit la ligne i que va prendre un pixel;

for j=1:p % la colonne j que va prendre aussi un pixel;
if g(i,j)<s % si la valeur de la matrice est inférieur au critére;
g(i,j)=0; % met 0;
else

%% TRACER UN CERCLE QUI VA PRENDRE QUE LES POINTS OU LES PIXELS SONT A 255 ET LES METTRE DANS UNE MATRICE X1 & Y1 QUE L'ON VA TRACER
g(i,j)=255; % sinon met 1;

x=i;
y=j;
x1=[x1,x]; % calcul de la nouvelle variable x1;
y1=[y1,y]; % calcul de la nouvelle variable y1;
k=k+1;
plot(x1,y1,'r'); %% on trace le cercle donnée par les pixels à 255 en rouge

end
end
end


%% J'INTRODUIS UNE FONCTION CIRCFIT QUI VA ME PERMET DE FITTER UN CERCLE AFIN DE DETERMINER LE RAYON DU CERCLE DONNEE PAR X1 & Y1

function [xc,yc,R,a] = circfit(x1,y1) % la fontion circfit qui prend en entée x1 & y1 renvoie en sortie xc, yc, le rayon R et un paramétre du cercle
% [xc yx R] = circfit(x,y);
% x^2+y^2+a(1)*x+a(2)*y+a(3)=0;
x1=x1(:); y1=y1(:);
a=[x1 y1 ones(size(x1))]\[-(x1.^2+y1.^2)];
xc = -.5*a(1)
yc = -.5*a(2)
R = sqrt((a(1)^2+a(2)^2)/4-a(3))
end

%% CREER UN DOSSIER OU ON VA STOCKER A CHAQUE FOIS LA VALEUR DU RAYON R DANS UNE COLONNE

pathname = 'test11';
mkdir('test11') % création d'un sous-répertoire pour stocker les résultats

fid=fopen('R','rb'); %
test11 = fread(fid, count, 'int16'); %
count=[n inf];% lire les données dans la matrice avec n colonnes utilisées




end




voila en gros mon code avec les commentaires de ce que je veux faire.
c'est archi complexe ce code.

mes principaux problémes c'est au niveau de l'importation des fichiers pour le code arrive a lire toutes les images et traitent une par une ensuite qu'il face la binairisation et aprés je veux utiliser une fonction fit circle pour fitter un cercle pour calculer le rayon de mes images binairisées.
par contre j'ai un grand soucis avec la fonction fit circle que matlab ne reconnait pas et j'arrive pas à fitter un cercle.
Aussi je souhaiterais stocker pour chaque valeur du rayon trouver dans un fichier sur une colonne et j'en ai du mal à le faire.

merci de votre compréhension et aidez moi à résoudre ce code s'il vous plait.
merci d'avance.
Messages postés
15243
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
19 avril 2021
834
si je comprends bien, tu as écrit un long code complexe qui ne fait pas ce que tu souhaites.
ne serait-il pas préférable de faire d'abord de petits morceaux qui fonctionnent?
ce que je souhaite faire je l'ai décris dans les commentaires et y'a des parties comme le filtre moyenneur, la binairisation et le traçage du cercle en utilisant les pixels à 255.

Mon problème est que je ne suis pas sur qu'il importe tous les images et les traites.
De plus je ne sais pas pourquoi ma fonction circfit ne marche pas alors que je l'ai appelé dans matlab.
Et mon autre soucis comment stocker les valeurs du rayon R après chaque calcul dans un fichier sur la même colonne.
En gros c'est cela que je n'arrive pas faire.
si vous pouviez m'aider j'aimerais bien si possible.
merci.