Fichier:Detection cercle image fortement bruitee.png
Detection_cercle_image_fortement_bruitee.png (366 × 365 pixels, taille du fichier : 24 kio, type MIME : image/png)
Ce fichier et sa description proviennent de Wikimedia Commons.
Description
DescriptionDetection cercle image fortement bruitee.png |
English: Detection of a circle in a very noisy picture.
The picture is a fuzzy circle: the intensity is a gaussian function of the difference between the distance to the center C(2;2) and the radius r = 2 of the nominal circle. A random background is added. The intensity ranges from 6 to 172, for a 256-level grey scale. The points that exceed a given intensity (threshold = 140) are extracted and represented as green crosses. The circle fitting is performed on these points. We use the Kåsa and Coope linear method (method of the algebraic distance).Français : Détection d'un cercle dans une image très bruitée.
L'image est un cercle flou : l'intensité est une fonction gaussienne de la différence entre la distance au centre C(2 ; 2) et le rayon r = 2 du cercle nominal. Nous ajoutons un fond bruité. L'intensité va de 6 à 172, pour une échelle de gris à 256 niveaux. Nous extrayons les points qui dépassent une intensité donnée (seuil = 140) ; ils sont représentés par des croix vertes. Nous effectuons une régression circulaire sur ces points. Nous utilisons la méthode linéaire de Kåsa et Coope (méthode de la distance algébrique). |
Date | |
Source | Travail personnel |
Auteur | Cdang |
Scilab source
![]() |
This media was created with Scilab, a free open-source software. Here is a listing of the Scilab source used to create this file. |
Programme de création de l'image. Ce programme génère trois fichiers :
X_cercle_bruite.txt
: échelle des x ;Y_cercle_bruite.txt
: échelle des y ;image_cercle_bruite.txt
: liste des intensités.
On peut jouer sur :
- le caractère plus ou moins flou du cercle : variable
sigmaflou
; - le caractère plus ou moins bruité du fond : variable
varfond
; - le rapport signal/bruit (contraste) : variables
intensite
etmoyfond
.
// **********
// Initialisation
// **********
clear;
clf;
chdir('monchemin/');
// **********
// Constantes
// **********
// image
xmin = -1;
xmax = 5;
ymin = -1;
ymax = 5;
pas=0.1;
// cercle
centre = [2;2]; // centre du cercle
rayon = 2; // rayon du cercle
sigmaflou = 1; // variance du flou gaussien (largeur)
intensite = 128; // 256 niveau de gris (0-255)
// fond, 256 niveau de gris (0-255)
varfond = 20; // variance du bruit de fond
moyfond = 64; // moyenne du fond
// **********
// Fonctions
// **********
function [y] = gauss(x, esperance, ecart_type)
y = 1/(ecart_type*sqrt(2*%pi))*exp(-((x - esperance)/ecart_type)^2/2);
endfunction
// **********
// Programme principal
// **********
// coordonnées
X = (xmin:pas:xmax)';
Y = (ymin:pas:ymax)';
tailleX = size(X, '*');
tailleY = size(Y, '*');
// fond d'image
base = ones(tailleX, tailleY);
fond = moyfond*base + varfond*rand(base, 'normal')
// tracé du cercle
cercle = zeros(base);
for i = 1:tailleX
for j = 1:tailleY
dist_centre = sqrt((X(i)-centre(1))^2 + (Y(j)-centre(2))^2);
cercle(i,j) = intensite*gauss(dist_centre, rayon, sigmaflou);
end
end
// image globale
image = floor(cercle + fond);
// Affichage
isoview(xmin, xmax, ymin, ymax)
cmap = graycolormap(256);
xset('colormap', cmap);
grayplot(X, Y, image);
// enregistrement
write('X_cercle_bruite.txt', X, '(F4.1)');
write('Y_cercle_bruite.txt', Y, '(F4.1)');
write('image_cercle_bruite.txt', image, '(I3)');
Programme traitant les données.
On peut jouer sur :
- le seuil de détection : variable
seuil
.
// **********
// Initialisation
// **********
clear;
clf;
chdir('monchemin/')
// **********
// Constantes
// **********
seuil = 140; // seuil de détection sur 256 niveaux de gris
// **********
// fonctions
// **********
// Recomposition de la matrice image
function [matrice]=matrice_image(tailleX, tailleY, vecteur)
// tailleX, tailleY : dimensions de l'image en nb de pts (entiers)
// vecteur : liste des intensités (tailleX*tailleY)
// matrice : intensités sous forme de matrice tailleX x tailleY
for i = 1:tailleX
for j = 1:tailleY
matrice(i,j) = vecteur((i - 1)*tailleX + j);
end
end
endfunction
// Détection de seuil
function [X, Y] = detection(Ximage, Yimage, intensite, seuil)
// Ximage, Yimage : échelles (vecteurs)
// intensité : niveaux de gris (matrice)
// seuil : seuil de détection (scalaire)
// X, Y : coordonnées des points dont l'intensité dépasse le seuil
// (vecteurs)
tailleX = size(Ximage,'*');
tailleY = size(Yimage,'*');
k = 1;
for i = 1:tailleX
for j = 1:tailleY
if (intensite(i,j) > = seuil) then
X(1,k) = Ximage(i);
Y(1,k) = Yimage(j);
k = k+1;
end
end
end
endfunction
// changement de variable initial
function [d]=chgtvar(A)
// A : matrice m*n
// n : nb de points ; m : dimension de l'espace (2 dans le plan)
// chaque colonne contient les coordonées des points exp
// d : matrice n*1
[m, n] = size(A);
for i = 1:n
d(i, 1) = norm(A(:,i)).^2;
end
endfunction
// régression circulaire linéaire
function [C, r, R]=regression_circulaire(X, Y)
// X, Y : points expérimentaux (vecteurs ligne)
// C : coordonnées du centre du cercle (vecteur)
// r : rayon du cercle (scalaire)
A = [X ; Y];
d = chgtvar(A);
// xetoile = 2*xcentre
// yetoile = 2*ycentre
// zetoile = r^2 - (xcentre^2 + ycentre^2)
[xyetoile, zetoile, sigma] = reglin(A, d');
C = 0.5*xyetoile;
r = sqrt(zetoile + C(1)^2 + C(2)^2);
R = sigma;
endfunction
// **********
// programme principal
// **********
// lecture des données
image_brute = read('image_cercle_bruite.txt', -1, 1); // intensité
Xdef = read('X_cercle_bruite.txt', -1, 1);
Ydef = read('Y_cercle_bruite.txt', -1, 1);
xmin = min(Xdef); xmax = max(Xdef);
ymin = min(Ydef); ymax = max(Ydef);
tailleX = size(Xdef, '*');
tailleY = size(Ydef, '*');
// mise en matrice des intensités
image = matrice_image(tailleX, tailleY, image_brute);
// Affichage de l'image bruitée
isoview(xmin, xmax, ymin, ymax);
cmap = [graycolormap(256);
0, 255, 0; // vert
225, 0, 0]; // rouge
xset('colormap', cmap);
grayplot(Xdef, Ydef, image);
// détection des pixels dépassant le seuil
[Xcercle, Ycercle] = detection(Xdef, Ydef, image, seuil);
plot(Xcercle, Ycercle, 'g+');
// regression
[centre, rayon, ecart] = regression_circulaire(Xcercle, Ycercle);
// écriture
texte = 'C('+string(centre(1))+' ; '+string(centre(2))+') ;...
r = '+string(rayon);
// fond blanc (4x le même texte décalé)
xstring(-0.48, 4.5, texte);
txt = gce(); txt.font_foreground = 256; // couleur blanc (cmap)
xstring(-0.52, 4.5, texte);
txt = gce(); txt.font_foreground = 256;
xstring(-0.5, 4.52, texte);
txt = gce(); txt.font_foreground = 256;
xstring(-0.5, 4.48, texte);
txt = gce(); txt.font_foreground = 256;
xstring(-0.5, 4.5, texte);
txt = gce(); txt2.font_foreground = 1; // couleur noir (cmap)
// tracé du modèle
plot(centre(1), centre(2), 'r+')
diametre = 2*rayon;
xarc(centre(1) - rayon, centre(2) + rayon,...
diametre, diametre,...
0, 360*64)
b = gce(); // cercle
b.foreground = 258; // couleur rouge (cmap)
// Affichage des paramètres
print(%io(2), centre)
print(%io(2), rayon)
print(%io(2), ecart)
Conditions d’utilisation
![]() |
Vous avez la permission de copier, distribuer et modifier ce document selon les termes de la GNU Free Documentation License version 1.2 ou toute version ultérieure publiée par la Free Software Foundation, sans sections inaltérables, sans texte de première page de couverture et sans texte de dernière page de couverture. Un exemplaire de la licence est inclus dans la section intitulée GNU Free Documentation License.http://www.gnu.org/copyleft/fdl.htmlGFDLGNU Free Documentation Licensetruetrue |
![w:fr:Creative Commons](https://upload.wikimedia.org/wikipedia/commons/thumb/7/79/CC_some_rights_reserved.svg/90px-CC_some_rights_reserved.svg.png)
![paternité](https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Cc-by_new_white.svg/24px-Cc-by_new_white.svg.png)
![partage à l’identique](https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Cc-sa_white.svg/24px-Cc-sa_white.svg.png)
- Vous êtes libre :
- de partager – de copier, distribuer et transmettre cette œuvre
- d’adapter – de modifier cette œuvre
- Sous les conditions suivantes :
- paternité – Vous devez donner les informations appropriées concernant l'auteur, fournir un lien vers la licence et indiquer si des modifications ont été faites. Vous pouvez faire cela par tout moyen raisonnable, mais en aucune façon suggérant que l’auteur vous soutient ou approuve l’utilisation que vous en faites.
- partage à l’identique – Si vous modifiez, transformez, ou vous basez sur cette œuvre, vous devez distribuer votre contribution sous la même licence ou une licence compatible avec celle de l’original.
Légendes
Éléments décrits dans ce fichier
dépeint
Valeur sans élément de Wikidata
10 décembre 2012
Historique du fichier
Cliquer sur une date et heure pour voir le fichier tel qu'il était à ce moment-là.
Date et heure | Vignette | Dimensions | Utilisateur | Commentaire | |
---|---|---|---|---|---|
actuel | 10 décembre 2012 à 16:12 | ![]() | 366 × 365 (24 kio) | Cdang | {{Information |Description ={{en|1=margins removed}} |Source ={{own}} |Author =Cdang |Date = |Permission = |other_versions = }} |
10 décembre 2012 à 14:50 | ![]() | 610 × 460 (18 kio) | Cdang | {{Information |Description ={{en|1=Detection of a circle in a very noisy picture. The picture is a fuzzy circle: the intensity is a gaussian function of the difference between the distance to the center C(2;2) and the radius ''r'' = 2 of the nomina... |
Utilisation du fichier
La page suivante utilise ce fichier :
Métadonnées
Ce fichier contient des informations supplémentaires, probablement ajoutées par l'appareil photo numérique ou le numériseur utilisé pour le créer.
Si le fichier a été modifié depuis son état original, certains détails peuvent ne pas refléter entièrement l'image modifiée.
Résolution horizontale | 28,35 pt/cm |
---|---|
Résolution verticale | 28,35 pt/cm |
Date de modification du fichier | 10 décembre 2012 à 13:14 |
Commentaire de fichier PNG |
|