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

2D-Histogramm

 

leon81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 13:37     Titel: 2D-Histogramm
  Antworten mit Zitat      
Hallo Zusammen,

ich habe zwei Bilder mit identischen Dimensionen und möchte nun für jede Grauwertkombination (x,y) mit x,y = [0...255] die Häufigkeit bestimmen und daraus ein "Histogrammbild" bestimmen (Dimensionen 256x256).

Momentan habe ich es mit 2 ineinander verschachtelten for-Schleifen gelöst, die jeweils von 1...256 laufen. Dies ist jedoch bei größeren Bilddaten äusserst langsam.

Frage:
Wie kann ich den Code schneller machen? Gibt es evtl sogar Matlab-eigene Routinen zur Berechnung eines solchen Histogramms bzw zur Abfrage der Existenzhäufigkeit eines bestimmten Grauwertpaares?

Vielen Dank vorab für eure Vorschläge!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.11.2011, 13:57     Titel: Re: 2D-Histogramm
  Antworten mit Zitat      
Hallo leon81,

Ich verstehe das Problem noch nicht. Wie wird die "Grauwertkombination (x,y)" genau gebildet? Is x der Wert aus dem einen Bild und y der Wert aus dem zweiten Bild an jeweils der gleichen Pixel-Position?

Wenn Du Deinen Ansatz mit den FOR-Loops posten würdest, könnte man Ratschläge zur Beschleunigung geben und wahrscheinlich wäre damit auch meine Nachfrage bereits geklärt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2011, 14:35     Titel:
  Antworten mit Zitat      
Hallo,

HIST3 mit passenden Parametern dürfte das gewünschte machen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leon81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 14:41     Titel:
  Antworten mit Zitat      
Hallo,
anbei der Code:

Code:

for t=1:1:256
        for s=1:1:256
            count = length(find((image1==s-1)&(image2==t-1)));
            hist2d(t,s) = count;
        end;
end;
 


Wäre super, wenn jemand Vorschläge hätte, wie man das beschleunigen könnte!
Vielen Dank und Grüße!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2011, 15:21     Titel:
  Antworten mit Zitat      
Hallo,

s.o. - HIST3 macht genau das.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leon81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 15:38     Titel:
  Antworten mit Zitat      
Hallo Harald,

könntest Du bitte den entsprechenden Code mit hist3 posten? Habe in der Doku leider nur Hinweise gefunden, die diesen Befehl als Plotroutine darstellen.
Ich möchte jedoch kein Histogramm geplottet haben, sondern ein 2D-"Histogrammbild" erstellen. Dies ist eine 256x256-Matrix mit den Existenzhäufigkeiten der Grauwertpaare in den beiden Eingangsbildern.

Vorab vielen herzlichen Dank!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2011, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

mit der Syntax
Code:

holst du dir die Ergebnismatrix von hist3 zurück, ohne sie zu plotten.

Danach kannst du N z.B. mit image oder imagesc darstellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leon81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 16:34     Titel:
  Antworten mit Zitat      
Erstmal vielen Dank!

Wie sieht das in meinem Fall explizit aus? was übergebe ich an hist3? die beiden Bilder? wenn nicht - dann was genau?

Danke und Grüße
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.452
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.11.2011, 16:58     Titel:
  Antworten mit Zitat      
Hallo,

ich merke gerade, dass ich von deiner ursprünglichen Fragestellung ausgegangen war und die falsch verstanden habe.
Was jedoch gehen sollte:
Code:
data = [image1(:), image2(:)];
N = hist3(data, {0:255, 0:255});
image(N)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
leon81

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.11.2011, 17:09     Titel:
  Antworten mit Zitat      
Hallo,

vielen Dank, das hat mir weitergeholfen.
Sieht gut aus, scheint so als wenn es funktioniert.

Nochmals danke für Deinen Einsatz und viele Grüße
 
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.