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

Programm zur Bestimmung der Korngößenverteilung

 

rango
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 20.07.2011, 13:43     Titel: Programm zur Bestimmung der Korngößenverteilung
  Antworten mit Zitat      
hallo zusammen

hab ein programm mit dem man die Korngrößenverteilung auf bildern bestimmen kann.
problem : wie stelle ich die maße ein, denn es wird nicht angezeigt wie groß die partikel sind, man sieht nur eine häufigkeitsverteilung.
zusätzlich würde ich gern wissen wie man die verteilung von mehreren bildern zusammen bestimmen kann.
im anhang findet ihr das programm.

besten dank
rango

ps: bin ein totaler anfänger

xtended_gui.m
 Beschreibung:

Download
 Dateiname:  xtended_gui.m
 Dateigröße:  5.21 KB
 Heruntergeladen:  716 mal
xtended_gui.fig
 Beschreibung:

Download
 Dateiname:  xtended_gui.fig
 Dateigröße:  14.6 KB
 Heruntergeladen:  699 mal
Private Nachricht senden Benutzer-Profile anzeigen


Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 23.07.2011, 18:17     Titel:
  Antworten mit Zitat      
mach dir das fig im guide auf und guck hinter die buttons:
rechtklick->View Callbacks->Callback

dann versuch das zu verstehen,
Code:
help [befehl]


nutzt schon viel, und dann frag am besten nochmal, bei welchem Button genau was wie eingestellt werden soll.
_________________

Ich hasse es wenn die Leute Fragen stellen, man dann versucht sich Mühe zu geben, und diejenigen ihren Thread nie wieder besuchen...
Private Nachricht senden Benutzer-Profile anzeigen
 
rango
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 24.07.2011, 13:47     Titel:
  Antworten mit Zitat      
hallo und erstmal danke.

hab es im guide aufgemacht und soweit ich es verstanden habe, ist nichts geschrieben was die maßen angeht.

Code:

% --- Executes on button press in pushbutton5.
function pushbutton5_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton5 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
L = getimage(handles.axes2);
stats = regionprops(L);
A = [stats.Area];
figure
hist(A)
xlabel Area
ylabel Popularity
title('Size Distribution')
 


könnte man das noch rein bringen?
muss sagen, dass ich mich mit matlab wenig auskenne.

lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 24.07.2011, 14:19     Titel:
  Antworten mit Zitat      
Moin,

wie wäre es, wenn Du um ein Partikel einen Ausschnitt legst. Als Rückhabe wird Dir die Anzahl der Pixel wiedergegeben. Diese müssen dann zu einer Größe in Verhätnis gesetzt werden, was aber kein Problem sein dürfte, denn die Größe der eingelesenen Bilder ist bekannt.
Private Nachricht senden Benutzer-Profile anzeigen
 
rango
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 24.07.2011, 20:02     Titel:
  Antworten mit Zitat      
tach Smile
hab es nicht ganz verstanden.
wie lege ich einen ausschnitt und was meinst du mit pixel?
könntest du es bitte etwas genauer beschreiben.

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 25.07.2011, 04:15     Titel:
  Antworten mit Zitat      
Wenn Du:

Code:
I=imread('cameraman.tif');
figure; imshow(I)
[xx,yy]=ginput(1);
hold on
plot(xx,yy,'+');
[xxx,yyy]=ginput(1);   % mit Fadenkreuz 2 Punkte für Rechteck festlegen
x=[xx xx xxx xxx xx];
y=[yy yyy yyy yy yy];
plot(x,y);
hold off;
startzeile=min(x);  startzeile= startzeile - mod(startzeile,1);
endzeile=max(x);    endzeile=   endzeile - mod(endzeile,1);
startspalte=min(y); startspalte=startspalte - mod(startspalte,1);
endspalte=max(y);   endspalte=  endspalte - mod(endspalte,1);
Ausschnitt=I(startspalte:endspalte,startzeile:endzeile);

figure; imshow(Ausschnitt);


dann erhälst Du einen Ausschnitt von einem Partikel und als Rückgabewert die Größe des Partikel, ident. mit der Größe des neuen Bildes.
Private Nachricht senden Benutzer-Profile anzeigen
 
rango
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 25.07.2011, 10:57     Titel:
  Antworten mit Zitat      
nochmal danke für die mühe guru
jetzt ist es mir klar.

damit kann ich aber nur rechteckige ausschnitte machen, die teilchen sind alles andere als rechteckig, außerdem sind es viele teilchen.
kann man den code, den ich angehängt habe, wirklich nicht so ändern, dass auf der x-achse auch die größe angezeigt wird(anhand des bildmaßstabs) und auf der y -achse die anzahl. das ist doch eigentlich der sinn der sache.
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 25.07.2011, 11:49     Titel:
  Antworten mit Zitat      
Ich war der Meinung, dass es Dir um die Größe geht.
Zitat:
es wird nicht angezeigt wie groß die partikel sind

Sollte es Dir doch noch um die "Fläche" gehen, dann findest Du hier eine
Lösung:

http://www.gomatlab.de/flaechenbere.....light,pixel+z%E4hlen.html

Du kannst natürlich einen in Abschnitten anders farbigen Referenzbalken waagerecht in das Bild einfügen, und den Abschnitten eine Maßzahl zuordnen.
Wäre das noch eine Option?
Private Nachricht senden Benutzer-Profile anzeigen
 
rango
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 25.07.2011, 15:02     Titel:
  Antworten mit Zitat      
es geht mir um die verteilung der korngößen auf dem bild ( Bsp. ein bild mit reiskörnern)
das programm das ich angehängt habe macht es schon richtig, man kriegt auf der x-achse die größe der körner ( mittlere durchmesser) und y-achse anzahl, somit hat man eine größenverteilung, das problem dabei ist, ich kriege keine richtigen werte mit einheiten.
schau es dir doch mal an wenn du die zeit hast. ich häng dir noch ein bild an welches du auswerten kannst Smile

Metal_Bond_Micron_M1.jpg
 Beschreibung:

Download
 Dateiname:  Metal_Bond_Micron_M1.jpg
 Dateigröße:  96.18 KB
 Heruntergeladen:  911 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
rango
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 25.07.2011, 15:05     Titel:
  Antworten mit Zitat      
es geht mir um die verteilung der korngößen auf dem bild ( Bsp. ein bild mit reiskörnern)
das programm das ich angehängt habe macht es schon richtig, man kriegt auf der x-achse die größe der körner ( mittlere durchmesser) und auf der y-achse die anzahl, somit hat man eine größenverteilung, das problem dabei ist, ich kriege keine richtigen werte mit einheiten.
schau es dir doch mal an wenn du die zeit hast. ich häng dir noch ein bild an welches du auswerten kannst Smile

Metal_Bond_Micron_M1.jpg
 Beschreibung:

Download
 Dateiname:  Metal_Bond_Micron_M1.jpg
 Dateigröße:  96.18 KB
 Heruntergeladen:  910 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 28.07.2011, 20:48     Titel:
  Antworten mit Zitat      
Hallo,

Ich denke nicht das dein Program auch nur im Ansatz macht was du moechtest. Wenn ich mir das Bild betrachte sehe ich etwa 30-50 Koerner, je nachdem ob verbundene Koerner nur 1 Korn ist oder eben mehrere. Schaust du dir jetzt mal die Anzahl deiner segmentierten Regionen an:
Code:

so sind es 311. Davon sind viele auch nur 1 Punkt gross! Ich denke es ist ein wenig mehr image processing noetig um wirklch erstmal die einzelnen Koerner zu segmentieren. Die Darstellung der Koernerverteilung ist dann eher die einfache Aufgabe.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
rango
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 12.07.11
Wohnort: Aachen
Version: 7.11.0(R2010b)
     Beitrag Verfasst am: 28.07.2011, 21:40     Titel:
  Antworten mit Zitat      
Hi,

kann es so abändern dass das macht was es machen soll?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 28.07.2011, 21:59     Titel:
  Antworten mit Zitat      
Hallo,

ist das jetzt eine Frage oder nicht Smile. Naja ich kann dir keine pauschale Loesung fuer dein Problem geben, da mir dazu schlichtweg die Zeit fehlt. Ich empfehle dir ein Image Processing Buch zu lesen bzw. im Internet nach derartigen Quellen zu suchen. Ich persoenlich kann die "Image Processing using Matlab" Serie empfehlen (Buch), dort werden Methoden der Bildverarbeitung am Beispiel von Matlab gezeigt.

Edit: Ok ich habe doch mal ein wenig rumprobiert, ich denke dies sollte ein guter Anfang sein:
Code:

img = imread('Metal_Bond_Micron_M1.jpg');
cannyImg = edge(rgb2gray(img),'canny'); % Kantendetektion
dilateImg = imdilate(cannyImg,strel('disk',2)); % versuche Loecher zu schliessen um geschlossene Konturen zu erhalten
fillHoles = imfill(dilateImg,'holes'); % fuelle Loescher
erodImg = imerode(fillHoles,strel('disk',2)); % verkleiner die Strukturen wieder um den "gleichen" Betrag die sie zuvor vergroessert wurden
clean = bwareaopen(erodImg,200,8); % entferne kleine Strukturen
imshow(clean)
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Philip
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 02.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2014, 20:20     Titel: While-Schleife für Ausschnittwahl
  Antworten mit Zitat      
Hallo,

da ich aus diesem Beitrag den Input bzgl. Bildausschnitte wählen entnommen habe, versuche ich meine Frage mal hier unterzubringen.

Für eine Bild Analyse von Schliffbildern mit Poren habe ich mich an einem kleinen Script probiert.
Es wandelt ein Bild in ein Binärbild und teilt es in Ausschnitte und beurteilt für jeden Ausschnitt den Schwarz/Weiß-Anteil.
Das If-Kritierium bzgl. b bzw. h = 0 könnt man vllt anders umsetzen, aber von Prinzip sollte es so passen.
Die innere while-Schleife (b) klappt auch und wenn ich h (=Spalte) festhalte, dann geht er brav die Zeile durch und arbeitet die Abschnitte ab. Also müsste die Idee an sich stimmen!?
Warum geht die äußere Schleife nicht? Kommt auch kein Syntaxfehler, nur MatLab hört vor der h-Schleife auf (sehe ich daran, weil er die davor deklarierten Variablen anlegt).

Das Script ist möglicherweise generell noch nicht so optimal, aber das ist erstmal bei meinem ersten MatLabversuch bei rumgekommen. So Sachen wie Daten in Matrix schreiben usw. werd ich noch einbringen.

Ich danke schonmal!

Grüße,
Philip

Code:
A = 'test-schliff.bmp';
B = imread(A, 'bmp');
C = im2bw(B);
hoehe = size(C,1);
breite = size(C,2);
hoeheklein_double = hoehe/7;
breiteklein_double = breite/5;
hoeheklein = int32(double(hoeheklein_double));
breiteklein = int32(double(breiteklein_double));
h=0;
b=0;
while h <= 6
   if h == 0
      y_start = 1
      y_end = hoeheklein
         while b <= 4
            if b == 0
               x_start = 1
               x_end = breiteklein
            else
               x_start = x_start+breiteklein
               x_end = x_end+breiteklein
            end
            if y_end > hoehe
               y_end = hoehe
            else
               y_end = y_end
            end
            if x_end > breite
               x_end = breite
            else
               x_end = x_end
            end
            Ausschnitt=C(y_start:y_end,x_start:x_end);
            figure,imshow(Ausschnitt);
            numwhitepixel = nnz(Ausschnitt==1);
            ratio = numwhitepixel / numel(Ausschnitt);
            eval( [['Aus_' int2str(h),int2str(b)] '= ratio'] );
            clearvars Ausschnitt;
            b=b+1;
         end;
      h=h+1;
   else
      y_start = y_start+hoeheklein
      y_end = y_end+hoeheklein
         while b <= 4
            if b == 0
               x_start = 1
               x_end = breiteklein
            else
               x_start = x_start+breiteklein
               x_end = x_end+breiteklein
            end
            if y_end > hoehe
               y_end = hoehe
            else
               y_end = y_end
            end
            if x_end > breite
               x_end = breite
            else
               x_end = x_end
            end
            Ausschnitt=C(y_start:y_end,x_start:x_end);
            figure,imshow(Ausschnitt);
            numwhitepixel = nnz(Ausschnitt==1);
            ratio = numwhitepixel / numel(Ausschnitt);
            eval( [['Aus_' int2str(h),int2str(b)] '= ratio'] );
            clearvars Ausschnitt;
            b=b+1;
         end;
      h=h+1;
   end;
figure,imshow(C);
Private Nachricht senden Benutzer-Profile anzeigen
 
Philip
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 02.01.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2014, 22:45     Titel: Klappt,neue Frage!
  Antworten mit Zitat      
Es läuft! End vergessen gehabt und das Zurücksetzen der inneren Schleife.

Andere Frage:
Wenn ich mein "Raster" (einzelne Ausschnitte) über das Gesamtbild des Schliffbilds lege, dann werden die Ausschnitte in den Randbereichen der Probe auch die Bereiche mit in die Bewertung mit einbeziehen, welche sich garnicht auf der Probe befinden.
Was für Möglichkeiten gibt es diese Bereiche auszuschließen?

Vielen Dank
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.