Frage:
Geht es überhaupt jedes Korn zu detektieren, wie ist eure Meinung?
Weiß jemand welches Verfahren dazu am besten geeignet ist?
Hat jemand einen entsprechenden Beispielcode?
ich habe mal so was ähnliches programmiert, allerdings mit Nanopartikeln (bzw. Nano-Clustern) in Zellen. Allerdings hat mir damals das bereits von dir genannte Beispiel sehr geholfen. Über Nacht ging aber auch das nicht
Ich behaupte das Problem liegt weniger am MatLab Code als an deinem Bild selber. Zum einen könnte die Auflösung einfach zu gering sein (k.A. ob das von dir gezeigte Bild das Original ist oder ob es verkleinert wurde). Zum anderen sehen die Körner auf dem Bild ja nahezu alle gleich groß / gleich hell aus... Manche hingegen sind unscharf.
Kannst du an den Parametern deines Experiments was drehen? Z.B. kannst du eine Monolage Körner machen? Kannst du die Auflösung verbessern? Die Belichtungsrichtung ändern? Bei letzterem denke ich an dieses Programm das in den letzten Tagen durch die Presse ging. Das besagte Programm kann an Hand von Helligkeitsunterschieden aus Google Earth Bildern sagen wie effektiv eine Solaranlage auf deinem (oder deines Nachbarn) Dach sein wird. Einfach nur durch die Helligkeitsunterschiede / Lichtreflexionen vom Dach.
vielen Dank für deine Antwort. Ich werde Versuchen die Qualität des Bildes zu verbessern, weiß aber nicht genau ob mir das gelingt.
Ich gehe jetzt nach folgendem Verfahren zur Detektion vor:
1. Bild aufarbeiten
2. Watershed zur detektion der Partikel
3. Detektion der Ellipsen mit regionprops
Leider habe ich eine sehr unsaubere Detektion (siehe Bilder im Anhang)
Wenn ich mir mit imperim die Durchmesser in meinem bw Bild berechnen lasse, dann sieht das ganze nicht schlecht aus (VorWatershed). Wenn ich das Bild aufarbeite und den watershed-Algorithmus laufen lasse und dann manuell Ellipsen für jede gefundene Region in das Bild rechnen lasse ist das Ergebniss ungenügend (Nach Watershed).
Mein Code:
Code:
I = imread('Detektionstest2.jpg');
I_cropped = imcrop(I,[150150300300]);% Croppregion anpassen imshow(I_cropped);
I_cropped = rgb2gray(I_cropped);
%% Elimenate background noise
background = imopen(I_cropped,strel('disk',15));
I2= I_cropped - background;
imshow(I2);
%% Kontrast erhöhen
I_eq = adapthisteq(I_cropped);
imshow(I_eq)
%% Elimenate background noise
background = imopen(I_eq,strel('disk',15));
Ieq= I_eq - background;
imshow(I_eq);
%% Umwandlung in ein Binärbild
bw = im2bw(I_eq, graythresh(I_eq));
imshow(bw)
%% Overlay to see the grain which can be detect
bw_perim = bwperim(bw);
overlay1 = imoverlay(I_eq, bw_perim, [.31 .3]);
imshow(overlay1)
%% Postprocessing the watersed algorithm
I_eq_c = imcomplement(I_eq);
I_mod = imimposemin(I_eq_c, ~bw);
%%
L = watershed(I_mod);
rgb = label2rgb(L,'lines',[.5 .5 .5]);
figure, imshow(rgb,'InitialMagnification','fit')
%% regionprops
graindata = regionprops(L, 'all');
%% Fit Ellipse in Picture imshow(I_cropped) hold on;
phi = linspace(0,2*pi,50);
cosphi = cos(phi);
sinphi = sin(phi);
for k = 1:length(graindata)
xbar = graindata(k).Centroid(1);
ybar = graindata(k).Centroid(2);
a = graindata(k).MajorAxisLength/2;
b = graindata(k).MinorAxisLength/2;
theta = pi*graindata(k).Orientation/180;
R = [cos(theta)sin(theta)
-sin(theta)cos(theta)];
xy = [a*cosphi; b*sinphi];
xy = R*xy;
x = xy(1,:) + xbar;
y = xy(2,:) + ybar;
plot(x,y,'r','LineWidth',2);
end
das Problem ist, wie marvin schon vermutet hat, dein Bild. Die Abgrenzungen zueinander sind verwaschen. Du brauchst eine Funktion, die die Kontraste erhöht. Also die Körner schärfer voneinander trennt.
Leider gibt es da nicht viele. Eine einfache Methode wäre ein Filterkern ([-1 -1 -1;-1 8-1;-1 -1 -1]). du kannst die Werte erhöhen oder auch 5*5 Kernel nehmen. Eine andere Möglichkeit, die Körner voneinander zu trennen wäre die BlindDeconvlution. Das Bild also als unscharf bewerten. Sie dazu deconvblind und ähnliche.
Gruß Tasso
Einstellungen und Berechtigungen
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
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.