WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Bildinhalte per Klick vermessen

 

stimpy
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2009, 13:37     Titel: Bildinhalte per Klick vermessen
  Antworten mit Zitat      
Hallo!
Ich möchte vorwegschicken, dass ich mich mit Matlab gerade ein Paar Wochen beschäftige.
Ich habe folgendes vor: Ich habe verschiedene Videos aus denen ich einzelne Bilder herauskopieren und diese analysieren will. Auf den Videos sind Blasen zu sehen, die sich durch einen engen Kanal bewegen.

Das Endergebnis stelle ich mir in etwa so vor: Ich lade ein Bild ein und lasse es mir anzeigen (so weit bin ich schon Wink). Ich möchte dann charakteristische Punkte an der Phasengrenzfläche anklicken können (zum Beispiel Blasenanfang und Ende, oder mehrere Punkte entlang der Wölbung der Blase etc.) und diese Werte in einer Matrix speichern. So möchte ich z.B.: Blasenlängen messen oder eine Funktion an die Wölbung der Blase fitten.

Ich habe schon eine Menge gelesen und mich auch schon mit der Image Processing Toolbox beschäftigt, bin aber bisher noch nicht darauf gekommen, wie ich Koordinaten via Mausklick aus den Bildern lesen kann.

Für Hilfe wäre ich sehr dankbar.
Grüße, Stimpy
Private Nachricht senden Benutzer-Profile anzeigen


stimpy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2009, 13:46     Titel:
  Antworten mit Zitat      
Ich bins nochmal. Ich habe gerade den GINPUT - Befehl gefunden. Das ist schon fast das, was ich suche. Allerdings öffnet MATLAB ein lehres Koordinaten-System , wenn ich GINPUT aufrufe. Wie bekomme ich das Bild in das Koordinatensystem rein, bzw. wie bringe ich MATLAB bei, dass ich in meinem zuvor geladenen Bild Punkte anklicken will?
Private Nachricht senden Benutzer-Profile anzeigen
 
stimpy
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 06.10.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2009, 14:23     Titel:
  Antworten mit Zitat      
So, ich habs hinbekommen Embarassed
Für den Fall, dass mal jemand einen ähnlichen Fehler macht:
man darf das Bild nicht mit imview(Matrix) aufrufen sondern mit imshow(Matrix). Dann klappts.
Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus_667
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 02.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.06.2012, 17:36     Titel:
  Antworten mit Zitat      
Hallo ich habe ein ähnliches Problem. Ich muss Risslängen ermitteln. Kannst du mir da weiterhelfen ? Oder vielleicht den Quelltext zur Verfügung stellen ?

Würde mir sehr helfen. Danke schonmal...
Private Nachricht senden Benutzer-Profile anzeigen
 
S.Schmutz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 08:41     Titel:
  Antworten mit Zitat      
Hallo zusammen,

ich habe ein ähnliches Problem wie Markus und stimpy, nur muss ich Zahnräder vermessen. Währ super wenn stimpy mir den Quellcode senden könnte wenn er das Problem schon gelöst hat.
Private Nachricht senden Benutzer-Profile anzeigen
 
Markus_667
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 02.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2013, 20:34     Titel:
  Antworten mit Zitat      
Ich habe sehr viel Hilfe hier im Forum bekommen, von da her möchte ich auch helfen. Ich werde dir kurz mein Vorgehen erläutern respektive bei Fragen gerne drauf antworten.

Messaufbau steht denke ich....Belichtung u.s.w.

Zunächst habe ich mir das aufgenommene Bild normiert. Ich habe mir ein Referenz-Objekt geschaffen welches eine feste definierte Größe hat.
Die Pixel kannst du dann einem realen Maß zuordnen.
Je nachdem, wie genau du das haben möchtest, sind orthogonale Messfotos dabei nicht von minderer Relevanz.
Du solltest auch die Verzeichnung des Objektivs bedenken. (Tonneneffekte)

Folgend das Bild in ein binäres Image (schwarz weiß) umwandeln. Dann lässt sich damit sehr gut arbeiten.

Störstellen beseitigen... dafür gibt es vielen tolle Befehlt in der Image Processing Toolbox.

Du könntest darauf hin eine Bilderkennung nutzen um Objekte zu erkennen.

Hilfe findest du auch auf der Homepage von Matlab, dort lassen sich die Pdfs für die ImageProcessing Toolbox laden.
Es gibt auch sehr gute Fachliteratur in englischer Sprache.
Und einen sehr guten Blog, musst du mal google bemühen. ("Steve on Image Processing".. or something like that)

Was soll denn genau vermessen werden ?
Solange du keine Evolventen erkennen und mathematisch beschreiben sollst ist das denke ich noch händelbar.
Private Nachricht senden Benutzer-Profile anzeigen
 
S.Schmutz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2013, 09:38     Titel:
  Antworten mit Zitat      
Es soll vom Mittelpunkt des Zahnrades aus, in verschiedenen Winkelabständen (z.B. 45° Schritten), der Radius bis zur Zahnspitze gemessen werden.
Und anschließend soll aus den Radien ein gemittelter Radius bestimmt werden.

Das mit dem Schwarz-Weiß-Bild hab ich auch so gemacht und hab dein ein Kanten Bild des Zahnrades erzeugt. Jedoch hab ich Schwierigkeiten den Mittelpunkt zu definieren bzw. zu finden.

Und wie ich genau messen soll wenn der Mittelpunkt definiert ist kann ich mir auch noch nicht so ganz vorstellen.
Private Nachricht senden Benutzer-Profile anzeigen
 
S.Schmutz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2013, 09:42     Titel:
  Antworten mit Zitat      
Code:
%
RGB = imread('C:\Users\pik\Desktop\Test2.png');

level=graythresh(RGB);
bw=im2bw(RGB,level);
bw=bwareaopen(bw,50);


%figure,imshow(bw);

BW1 = edge(bw,'canny');
figure, imshow(BW1)


Rmin = 80;
Rmax = 100;
[center, radius] = imfindcircles(RGB,[Rmin Rmax],'Sensitivity',0.99)

% Display the circle
viscircles(center,radius);

% Display the calculated center
hold on;
plot(center(:,1),center(:,2),'yx','LineWidth',2);
hold off;

 


derzeit ist mein code noch recht überschaubar
Private Nachricht senden Benutzer-Profile anzeigen
 
S.Schmutz
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 12.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.05.2013, 13:06     Titel:
  Antworten mit Zitat      
So ich hab jetzt mal mein Programm soweit fertig. Jedoch Sind die wert nicht sonderlich genau. Vielleicht weiß ja noch jemand wie man die Messung genau hinbekommt.

Code:


 clc;
clear all;
close all;

% Einlesen des zu vermessenden Zahnrades
Image = imread('C:\Users\pik\Desktop\POM_25_iso80_2_nach.bmp');
figure(1), imshow(Image);
[x1,y1] = ginput(1);
[x2,y2] = ginput(1);

% Graustufen-Bild in Schwarz/Weiß-Bild umwandeln
level = graythresh(Image);
BW = im2bw(Image,level);

% Erzeugen des Kantenbild
Edge = edge(BW,'canny', 0.5 );
%figure(5), imshow(Edge);

% Bestimmen des Kreisradiuses aus Kantenbild
Rmin = 50;
Rmax = 70;
[center_1, radius_1] = imfindcircles(Edge,[Rmin Rmax],'Sensitivity',0.9);

% Darstellung des Kreises im Kantenbild
viscircles(center_1,radius_1);

% Darstellung des Berechneten Mittelpunkts im Kantenbild
hold on;
plot(center_1(:,1),center_1(:,2),'yx','LineWidth',2);
hold off;

% Gerundete XY-Werte des Berechneten Mittelpunkts
X_1 = round(center_1(1));
Y_1 = round(center_1(2));

% Abbildung des neuen Schwarz/Weiß-Bild
BW2 = imrotate(BW((Y_1-500):(Y_1+500),(X_1-500):(X_1+500)),-0.5);
%figure(3), imshow(BW2);

% Erzeugen des neuen Kantenbilds
Edge2 = edge(BW2,'canny', 0.5 );
figure(2), imshow(Edge2);

% Bestimmen des Kreisradiuses des neuen Kantenbilds
Rmin = 50;
Rmax = 70;
[center_2, radius_2] = imfindcircles(Edge2,[Rmin Rmax],'Sensitivity',0.9);

% Darstellung des Kreises des neuen Kantenbilds
viscircles(center_2,radius_2);

% Darstellung des Berechneten Mittelpunkts des neuen Kantenbilds
hold on;
plot(center_2(:,1),center_2(:,2),'yx','LineWidth',1.9);
hold off;

% Definieren der Mittelpunktkoordinaten als Variable
X_2 = center_2(1);
Y_2 = center_2(2);                  

% Linie bestimmen
line1 = imline(gca,[X_2 400; X_2 20]);

% Maske festlegen
mask = createMask(line1);

b = 1;

for a=6.4:6.4:360

    BW2 = imrotate(BW2,a,'crop');
    Pos = find(BW2(mask),1,'first');
    figure(3), imshow(BW2);
    Radius(b) = X_2-20-Pos;
    Winkel(b) = a;
    b = b+1;
   
end

%Umrechnen des Radius von Pixel in mm
Radius_in_mm = Radius*((10)/(y2-y1));

%Berechnung min. Radius
Min_Radius = min (Radius_in_mm)

%Berechnung des Mittelwerts
Mittelwert = mean(Radius_in_mm)

%Berechnung max. Radius
Max_Radius = max(Radius_in_mm)

%Berechnung der Standartabweichung
Standartabweichung = std(Radius_in_mm)



figure(4),
plot1 = plot(Winkel,Radius_in_mm ,'x');

set(gca,'XTick',0:30:360);
title('Zahnradmeesung');
xlabel('Winkel [°]');
ylabel('Radius [mm]');
set(figure(4), 'Position', [200 250 1500 800]);
set(plot1,'Color','red','LineWidth',2);

hold all;
line1 = line([0,360],[Mittelwert,Mittelwert]);
set(line1,'Color','blue','LineWidth',2);

hold all;
line2 = line([0,360],[(Mittelwert+Standartabweichung),...
                      (Mittelwert+Standartabweichung)]);
set(line2,'Color','green','LineWidth',2);          

hold all;
line3 = line([0,360],[(Mittelwert-Standartabweichung),...
                      (Mittelwert-Standartabweichung)]);
set(line3,'Color','green','LineWidth',2);          


Legende = legend('Radien',['Mittelwert  ' num2str(Mittelwert)],...
                ['Standartabweichung  ' num2str(Standartabweichung)],...
                 'Location','NorthEastOutside');
set(Legende, 'Interpreter', 'none');

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.