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

Fenster um Pixel selektieren

 

soad
Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2009, 17:17     Titel: Fenster um Pixel selektieren
  Antworten mit Zitat      
Hi,

ich selektiere zufällig ein Pixel eines Bildes und möchte nun das Fenster der Größe N (N ungerade) um dieses Pixel erhalten, also der gewählte Pixel ist das Zentrum dieses Fensters; sozusagen die Submatrix selektieren.

Graphisch veranschaulicht, wobei o das gewählte Pixel ist und x die Elemente des Fensters angeben für N = 7;

Code:

ppppppppppp
ppppppppppp
ppxxxxxxxpp
ppxxxxxxxpp
ppxxxxxxxpp
ppxxxoxxxpp
ppxxxxxxxpp
ppxxxxxxxpp
ppxxxxxxxpp
ppppppppppp
ppppppppppp
 


Das Problem sind natürlich die Ränder des Bildes (ausserhalb wird der Wert 0 angenommen).

Kennt Ihr vielleicht eine Funktion, wie man grundsätzlich so ein Fenster selektieren kann bzw. die Ränder berücksichtigt oder komm ich da um eine Menge if-Abfragen nicht rum Wink?

Scheint mir halt recht ineffizient zu sein...

Ich hoffe, Ihr habt einen Tipp für mich!

mfg,
soad
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.02.2009, 17:24     Titel:
  Antworten mit Zitat      
IF könnte in der Tat ineffizient sein. MAX und MIN Operationen sind aber sehr fix. Wenn also ein 3 Pixel entfernter Nachbar auf "-1" sässe, könnte das am besten mit
Zitat:
berechneter_wert=max(1,berechneter_wert) gerade gezogen werden.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 00:31     Titel:
  Antworten mit Zitat      
In welchem Zusammenhang brauchst Du das? Evtl kommt die Nutzung von
Code:
aus der Image Processing Toolbox in Frage.
Kannst Du Dir nicht eine Matrix N*N (zeros oder auch nan) machen, und die Elemente mit 'gültigem' Index hierein kopieren? Man hat den ausgewählten Punkt in der p-Matrix, die Größe der p-Matrix, die Größe und den Mittelpunkt der x-Matrix. Da müsste man mit zwei, drei Vergleichsoperationen zu Rande kommen.
 
soad
Themenstarter

Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2009, 18:29     Titel:
  Antworten mit Zitat      
Danke erstmals euch beiden!

blkproc hatte ich mir eh schon angeschaut, aber ich wende die Funktion nicht auf das gesamte Bild an, sondern immer nur auf einen Block.

Mir erschien es jetzt am einfachsten das gesamte Bild zuerst mit 'padarray' zu erweitern, dann brauch ich mir zu mindestens um die Indizes keine Sorgen mehr zu machen Wink...

mfg,
soad
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.02.2009, 20:32     Titel:
  Antworten mit Zitat      
Vielleicht ist es so etwas geschickter, als eine u.U. große Matrix an den Rändern zu erweitern:
Code:
A=magic(10)
[XMax,YMax]=size(A);
x=2
y=3
n=4

X=x-n:x+n;
Y=y-n:y+n;
l=numel(X(X<=0))+1;
o=numel(Y(Y<=0))+1;
B=NaN(2*n+1);
ix=X(X>0&X<=XMax);
iy=Y(Y>0&Y<=YMax);
Bx=ix-min(ix)+l;
By=iy-min(iy)+o;
B(Bx,By)=A(ix,iy)
 
soad
Themenstarter

Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2009, 17:17     Titel:
  Antworten mit Zitat      
danke für deinen tipp! im moment ist die rechenzeit noch vertretbar Wink...

eine Frage noch zu "blkproc":
um die Funktion für jedes pixel auszuwerten, verwende ich momentan
Code:
blkproc(I, [1 1],  [3 3], fun)


also der "block" besteht nur aus einem pixel...das geht ein bisschen am sinn von blkproc vorbei Wink.
das problem ist nur jedes pixel soll einmal "center pixel' des blocks sein (also sliding window vs. distinct blocks); weiters wird eine matrix und kein skalar zurückgegeben (was gegen 'nlfilter' spricht).

ich bitte mal wieder um euren beistand Rolling Eyes Very Happy !

mfg,
soad
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2009, 17:35     Titel:
  Antworten mit Zitat      
Ich verstehe das nicht, welche Funktion soll denn auf jedes Pixel angewandt werden? Würde das evtl mit
Code:
machen.
 
soad
Themenstarter

Forum-Century

Forum-Century


Beiträge: 150
Anmeldedatum: 10.11.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.02.2009, 18:29     Titel:
  Antworten mit Zitat      
also, um jedes pixel wird ein fenster gelegt, wobei das aktuelle pixel den mittelpunkt des fensters darstellt. innerhalb dieses fensters werden nun 4 vektoren, deren länge der dimension des fensters entspricht, berechnet; also für ein NxN fenster wird für jedes pixel eine 4XN matrix zurückgegeben.

diese matrix soll für jedes pixel berechnet werden. also für ein PxQ Bild und NxN fenster erhält man eine (Px4) X (QxN) matrix zurück.

ich hoffe, das war etwas verständlicher Smile...
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.