Mihai Sprinceana
Un forum de programare cu de toate. Va astept sa va inscrieti si sa deveniti moderatori. Oricine este binevenit aici sa se inscrie si sa aiba acces la informatie free! Fiecare este liber sa adauge proiecte programe free etc. Ajutati acest forum sa devina o comunitate puternica unde fiecare invata de la fiecare! Tot ce trebuie sa faceti este sa va inregistrati si fiecare contributie se poate dovedi utila in timp! Forumul este free informatia free dk aveti timp liber ajutati si pe ceilalti si invatati si voi in acelasi timp! Haideti sa facem ceva pt.a ne ajuta intre noi! Cititi regulament postare forum inainte de a posta!
Lista Forumurilor Pe Tematici
Mihai Sprinceana | Inregistrare | Login

POZE MIHAI SPRINCEANA

Nu sunteti logat.
Nou pe simpatie:
Popa Bianca pe Simpatie
Femeie
25 ani
Valcea
cauta Barbat
25 - 63 ani
Mihai Sprinceana / Programe RNRF / Procedura center_of_mass pt o imagine Moderat de Laur69, fireratbat, profu.info, sade5000
Autor
Mesaj Pagini: 1
cosmin
Moderator

Din: Ploiesti
Inregistrat: acum 18 ani
Postari: 3
codul sursa il luati de aici:


Modificati la el daca e nevoie


pus acum 18 ani
   
mihaispr
Administrator

Inregistrat: acum 18 ani
Postari: 2142
Atasez aici si o varianta realizata in matlab pentru a calcula centrul de masa pentru urmatoarea imagine :

Poza center_of_mass.jpg o plasati in directorul work din matlab:





Codul sursa:

%Script pt.pixeli tetra-conectati -tetra.m

n=4;img=imread('center_of_mass.jpg');imshow(img)
BW=im2bw(img);imshow(BW);
%BW image binaire, n connectivit? : 4 ou 8
[L, num] = bwlabel(BW, n)
%L image labelis?e, num nombre d'objets
%initialisation d'un tableau stockant tes centro?des
centroid=zeros(num,2);
for indice=1:num
centroid(indice,1:2)=mean(find(bwlabel==indice));
end

%Script pt.pixeli octo-conectati -octo.m

n=8;img=imread('center_of_mass.jpg');imshow(img)
BW=im2bw(img);imshow(BW);
%BW image binaire, n connectivit? : 4 ou 8
[L, num] = bwlabel(BW, n)
%L image labelis?e, num nombre d'objets
%initialisation d'un tableau stockant tes centro?des
centroid=zeros(num,2);
for indice=1:num
centroid(indice,1:2)=mean(find(bwlabel==indice));
end

Pentru rularea celor 2 script-uri este suficient sa rulati in command window:

>>tetra

si

>>octo

Cele 2 tipuri de conectivitati sunt:

a) tetra-conectare

n=4 ,
0 1 0
1 P 1
0 1 0

b) octo-conectare
n=8
1 1 1
1 P 1
1 1 1

P- reprezinta pixelul central.

Acest script calculeaza centrul de masa pt.fiecare regiune a imaginii.

Scriptul center.m pentru calculul centrului de masa al unei imagini este prezentat mai jos.

Se ia imaginea circuit.tif (care se afla deja in folderul work si se aplica ) asupra ei calculul centrului de masa. Puteti copia o poza cu voi in folder-ul work si sa faceti testul pe ea citind-o in prealabil cu imread.

%Continut script center.m - comentariu matlab

clc;   

% preinitializari script matlab (script matlab -nu contine cuvantul rezervat
% function deci nu contine o functie sau subfunctie un script matlab)
clear all;
close all;

global masoara_pete_culoare
global k % zona definire variabile globale cu ajutorul cuvantului rezervat global

% totusi nu este recomandabila utilizarea variabilelor globale in matlab
% deoarece numele unei variabile poate lua diferite valori alternativ!!!

% titlul aplicatiei
disp('Aplicatie pt.a calcula centrul de masa al unei imagini de test citite cu imread');
% i este o imagine cu niveluri multiple de gri (0-255 valori asociate matricei)
% j- este o imagine binara (are pixeli albi si negri 0-1)

i=imread('circuit.tif');imshow(i) % citirea imaginii in variabila i
j = im2bw(i, 0.4); % pragul pentru imaginea binara stocata in v
valoare_prag = 100; %valoare prag
j = imfill(j, 'holes');

subplot(3,2,1); imagesc(i); colormap(gray(256)); title('Imaginea initiala');

subplot(3,2,2); imagesc(j); colormap(gray(256));
title('Imagine binara');

label= bwlabel(j, 8); % etichetarea regiunilor din imagine cu functia bwlabel
culori_labels= label2rgb (label, 'hsv', 'k', 'shuffle');% culori aleatoare pt.label-uri

subplot(3,2,3); imagesc(label); title('Imaginea cu regiunile etichetata cu ajutorul functiei bwlabel')

subplot(3,2,4); imagesc(culori_labels); title('Culori aleatoare pt.label-uri');

masoara_pete_culoare= regionprops(label, 'all'); %toutes les proprietes des taches d'encre de l'image

numar_pete= size(masoara_pete_culoare, 1);

subplot(3,2,5); imagesc(i); title('Expunere elemente');

hold on; % retinerea graficelor cu subplot

%Functia bwboundaries intoarce un cell-array in care fiecare celula contine
%coordonatele linie si coloana pentru fiecare obiect din imagine

frontiere = bwboundaries(j); % j este imagine binara

%functia cell2 mat -convertim din variabila de tip cell-array in variabila
%de tip matrice
for contor = 1 : numar_pete
        pata_curenta = cell2mat(bwboundaries(contor));
        plot(pata_curenta(:,2), pata_curenta(:,1), 'g','LineWidth', 2);
end

%undefined index matrix error conversie cell2mat solutie

hold off; % operatie opusa lui hold on

for k = 1 : numar_pete
listare_pixeli = masoara_pete_culoare(k).PixelIdxList; % listare pixeli cu ajutorul PixelIdxList


hold off;
% operatie medie pt.fiecare pata de culoare cu ajutorul functiei mean

medie = mean(i(listare_pixeli)); % intensitate medie in imaginea i

suprafata_pata = masoara_pete_culoare(k).Area; % arie
perimetru_pata = masoara_pete_culoare(k).Perimeter; % perimetru
centru_de_masa = masoara_pete_culoare(k).Centroid; % centroid -centre de masse

%afisare date cu fprintf

    fprintf(1,'#%d %18.1f %11.1f %8.1f %8.1f \n', k, medie,suprafata_pata , perimetru_pata, centru_de_masa ); % afisare folosind functia fprintf
end


pus acum 17 ani
   
Pagini: 1  

Mergi la