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

Fluoreszenz, Tiefenbestimmung und 3D-Darstellung

 

Peter K

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 23:10     Titel: Fluoreszenz, Tiefenbestimmung und 3D-Darstellung
  Antworten mit Zitat      
Hallo ihr lieben,

# Problembeschreibung:
Ich bekomme Mikroskop-Bilder (16-Bit Grauwerte, als TIF) als Z-Stapel (20 bis 80 Bilder am Stück aufgenommen in aufeinander folgenden Z-Ebenen). Auf diesen Bildern sind fluoreszierende Partikel zu sehen, die wenn sie nicht im Fokus liegen von Beugungsringe umgeben sind. (Ausschnitt siehe Anhang) Die Ringe werden größer, je weiter man von der Fokusebene entfernt ist.

# Ziel ist es zu unterscheiden ob ein Partikel A, einen anderen Abstand zur Fokusebene hat als ein anderes Partikel B und wie weit sie voneinander entfernt sind, um ihnen dann eine Tiefe zuordnen zu können. (über den bekannten Abstand der Z-Ebenen)

# Mein Ansatz ist es,
ich lese die Bilder ein (über „imread()“),
ich entferne unerwünschte Bildstörungen so gut es geht (siehe Quelltext),
ich füge das gerade verarbeitete 2D-Bild zu einer 3D-Matrix hinzu (hier die Variable „ImageStack“) und erzeuge so einen Bildstapel.

Bis hier hin habe ich es aus anderen Programmen und mit der Hilfe-Funktion zusammenbauen können. Was jetzt fehlt und wo ich verzweifle ist:

Der „ImageStack“ soll als 3D-Graf dargestellt werden, dort würden die Ringe trichterförmige Gebilde bilden, mit denen man auf einen Blick sagen kann, wo die Beugungsringe ihre kleinste Ausdehnung haben. Dafür soll der Grauwert 0 als durchsichtig gewertet werden und der maximale Grauwert einem hellen Weiß entsprechen. Versucht habe ich es mit „surf“ mit „hist3“ mit "surface" und „plot3“. Aber ich bekomme nicht einmal ein 3D-Bild hin.

Ich vermute, ich muss das was ich über „imread()“ bekomme in eine andere Form bringen, aber da ich keine Ahnung von MatLab habe und keine Passenden Beispiele finde, verzweifle ich dabei.

Dazu kommen Fragen wie:
* Wie kann man Punkte über mehrere Bilder tracken und dabei prüfen ob der Ring größer oder kleiner wird?
* Gibt es eine fertige Funktion, die Beugungsringe erkennt und auswertet?
* Die Z-Stapel-Bilder bekomme ich als .zvi-Datei, gibt es eine Möglichkeit sie direkt daraus einzulesen, ohne sie zuvor manuell als TIF exportieren zu müssen?
* Wie kann man das restliche Hintergrundrauschen sinnvoll entfernen? (siehe Bild im Anhang)


Ich wäre sehr dankbar für code-Beispiele und jeden Tip.



#Es wurde von mir sehr viel mehr ausprobiert als da steht, aber alles was nicht geklappt hat, habe ich weckgelassen.
Code:

% ==== ==== ==== ====
% Bild(er) Pfad einlesen
% ==== ==== ==== ====
[filenames, pathstr]= uigetfile({'*.jpg;*.tif;*.png;*.gif','All Image Files';'*.*','All Files'},'MultiSelect', 'on');

% filenames muss immer cell-typ sein!
if ~iscell(filenames)
   filenames={filenames};
end

if filenames{1} == 0
    return;
end

ImageAnz = numel(filenames);

filepfad = fullfile(pathstr,filenames{1});
Image = imread(filepfad);  % 16bit
ImageStack = zeros(size(Image,1), size(Image,2), ImageAnz);      % 3D matrix vorbereiten

for filenumber = 1:1:ImageAnz
% ==== ==== ==== ====
% Bild einlesen
% ==== ==== ==== ====
    filepfad = fullfile(pathstr,filenames{filenumber});
    Image = imread(filepfad);  % 16bit


% ==== ==== ==== ====
% Bild Filtern, Vorbereitung zur Analyse
% ==== ==== ==== ====
background = imopen(Image,strel('disk',15));         % Hintergrund erkennen
Image2 = Image - background;                             % Hintergrund abziehen
Image2(Image2 <= 1000) = 0;                              % Restliches Hintergrund-flimmern abziehen (geht das auch dynamischer?)
Image3 = imadjust(Image2); %imshow(I3),            % Kontrast erhöhen

Vektor = Image3(:);
hist(Vektor,10)

%%%% Ränder anzeigen
% [~, threshold] = edge(I4, 'sobel');
% fudgeFactor = .5;
% BWs = edge(I4,'sobel', threshold * fudgeFactor);
% figure, imshow(BWs), %title('binary gradient mask');


% ==== ==== ==== ====
% Bild-Ebene zum 3D hinzufügen
% ==== ==== ==== ====
ImageStack(:,:,filenumber) = Image3;


% ==== ==== ==== ====
% Bild anzeigen
% ==== ==== ==== ====
%himage = imshow(Image3); hfigure = figure; hpanel = impixelregionpanel(hfigure, himage);   %%%% zum Testen der GW-Höhe %%%%


% ==== ==== ==== ====
% Gefilterte Bild speichern
% ==== ==== ==== ====
[pathstr, name, ext] = fileparts(filepfad);
ext = '.TIF';                                                   % immer tif
newpathstr = strcat(pathstr, '/new');                       %
mkdir(pathstr);                                              

newname = strcat(name, '_-bg');           imwrite(Image3,fullfile(newpathstr,[newname ext]),strrep(ext, '.', ''));


end

%surf(ImageStack)                             % so geht es nicht...
 


Bild_3_-bg_h_.tif
 Beschreibung:

Download
 Dateiname:  Bild_3_-bg_h_.tif
 Dateigröße:  40.43 KB
 Heruntergeladen:  500 mal


Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 08.02.2013, 08:49     Titel:
  Antworten mit Zitat      
Moin,

ich kann dein Bild im Moment nicht bearbeiten, habe mir so ein "ähnliches" gemacht. Um das Rauschen zu entfernen würde ich zunächst einmal einen Medianfilter nehmen. Ich denke, dass im Bild Impulsrauschen vorliegt. Sonst liegst du mit deinen Funktionen zur Bildbearbeitung gar nicht so verkehrt. Es gibt dazu allerdings sehr viele Abwandlungen. Versuche mal:

Code:
SE=strel(..Funktion wählen..); % eine Funktion müsste zum Ziel führen
BW2=imerode(Image,SE);
BW3=imdilate(BW2,SE);
 



Viele Glück erst einmal

Hubertus
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: 08.02.2013, 12:05     Titel:
  Antworten mit Zitat      
Ich habe jetzt dein Bild mal genauer betrachtet. Es hilft, das Bild notfalls zu vergrößern, weil sich dadurch die Proportionen der Funktionen verschieben. Bei 462x600 kann man auch hiermit arbeiten - es bleiben noch viele Varianten übrig.

Code:
I2=Image>120;
I3=imdilate(I2,ones(2,2));
Private Nachricht senden Benutzer-Profile anzeigen
 
Peter K

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2013, 12:54     Titel:
  Antworten mit Zitat      
Danke für die Antworten, ich probiere das mal aus.

Fällt noch Jemandem etwas zu den anderen Fragen ein?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.02.2013, 04:53     Titel:
  Antworten mit Zitat      
Hallo Peter,

Hast Du mal für die Visualisierung in Matlab's FileExchange gesucht? Wie wäre z.B. http://www.mathworks.com/matlabcentral/fileexchange/30721-image3 oder http://www.mathworks.com/matlabcent.....7138-quick-3d-data-viewer?

Gruß, Jan
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 - 2025 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.