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

Muster in einem Bild finden

 

Zenker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 10:13     Titel: Muster in einem Bild finden
  Antworten mit Zitat      
Hallo,

ich möchte alle Muster in einem Bild finden z.B.

0 0 0 255
255 0 0 0
0 0 255 0


und zwar nach möglichkeit schnell..

ich habe nun über mehrere For-Schleifen einen laufenden Code hinbekommen, aber durch die ganzen IF-Schleifen brauch das ding für ein Bild fast 20 Mintuen - bissi lang Wink

Also.,. kann mir jemand helfen??

Besten Dank im Voraus & Gruß,

Zenker


Maddy
Ehrenmitglied

Ehrenmitglied



Beiträge: 494
Anmeldedatum: 02.10.08
Wohnort: Greifswald
Version: ---
     Beitrag Verfasst am: 24.06.2010, 11:42     Titel:
  Antworten mit Zitat      
Könntest du mal den Code posten? Weil 20min für ein Bild erscheint mir doch ziemlich viel. Wie groß ist so ein Standard-Bild?

edit: hab mal kurz gesucht und folgendes gefunden:
http://www.mathworks.nl/matlabcentr.....reader/view_thread/247971 vll hilft es.
_________________

>> why
The computer did it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2010, 14:50     Titel:
  Antworten mit Zitat      
servus, erstmal danke für deine antwort...

bin grad unterwegs ab die bilder sind so 1000 x 2000 groß und im moment such ich nur quadrate, die ins bild passen würden in binärbildern.

sinngemäß

max =0
for i =1:max_x
for j=1:max_y
n = 0
while(1)
if(min(min(array(i+n,j+n)) == 0)
break;
n = n+1;
end
end
if(max < n)
max = n
end
end

so oder so ähnlich - man kann da noch nen bissi was optimieren, aber im prinzip sieht so der kern-code aus... und das dauert sau lange einfach
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 24.06.2010, 15:14     Titel:
  Antworten mit Zitat      
Hallo

versuch mal diese Funktion:

http://www.mathworks.de/matlabcentr.....exchange/23998-findsubmat
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.06.2010, 00:03     Titel:
  Antworten mit Zitat      
Im Prinzip ist die Funktion genau das was ich suche... Problem ist nur, dass sie sau lange braucht und zu allem Überfluss auch noch crasht wegen out of memory (2gb@Ubuntu 10.04)

>> test123 = ones(255);

>> max(max(Delete_pic_bw))

ans =

1

>> [test1, QLT] = findsubs(Delete_pic_bw,test123,100)
??? Out of memory. Type HELP MEMORY for your
options.

Error in ==> meshgrid at 45
yy = yy(:,>> test123 = ones(255);
>> max(max(Delete_pic_bw)
??? max(max(Delete_pic_bw)
|
Error: Expression or statement is
incorrect--possibly unbalanced (, {, or [.

Bild ist wie gesagt 2000 * 1000 groß...
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 25.06.2010, 08:44     Titel:
  Antworten mit Zitat      
Hallo Zenker

verlinkt habe ich aber andere Funktion FINDSUBMAT, die ist schneller als meine Version FUNDSUBS, die du benutzt hast.
Also Passt FINDSUBMAT etwa nicht?

Okay ich schaue, später wenn ich Zeit habe, ob ich auch meine Funktion optimieren kann.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2010, 10:38     Titel:
  Antworten mit Zitat      
Danke schonmal, ich weds morgen testen udn mich dann melden..

Gruß,

Zenkre
 
HasanK
Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 23.06.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2010, 12:19     Titel:
  Antworten mit Zitat      
1. soweit ich weiß, müsste dein eingelesenes Bild eine 3-Dimensionale Matrix sein.
2. die relevanten Farbe (R G oder B) in der das Muster eindeutig zu erkennen ist auswählen, und nur die betrachten so dass deine Matrix 2-dimensional ist.
bspw. heißt die Matrix 'A'

3. anschließend durch max(max(A)) die den Maximal-Pixelwert deiner Matrix identifizieren.

4. ein Kriterium definieren: bspw. 0.8 fache max-Pixelwert

5. die Matrix A durch den Befehl: A=A>0.8 x max-Pixelwert den Muster erkennen

6. wenn du gleichzeitig mit size(A,1) und size(A,2) quasi ein Koordinatensystem definierst und damit die neue Matrix multiplizierst hast du die Position des Musters.
Private Nachricht senden Benutzer-Profile anzeigen
 
Zenker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2010, 19:58     Titel:
  Antworten mit Zitat      
versteh ich net wie das klappen soll, sorry. Es handelt sich übrigens um binärbilder
 
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.