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

Pixel zählen

 

Neme
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.12.10
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 14.12.2010, 11:26     Titel: Pixel zählen
  Antworten mit Zitat      
Hallo zusammen,

kann ich mir von matlab auch die Dimensionen eines Bildes ausgeben lassen?
Ich würde gern wissen, wie viel pixel * pixel mein Bild groß ist, also z.B. als Ausgabe: 1400 x 500

Zum Verständnis: Wenn mein Bild 1400 x 500 groß ist, liesst matlab dieses dann als eine matrix mit 1400 spalten und 500 Zeilen ein?

Wenn ich ein Bild mit B=rgb2gray(A); bearbeite...liegt es ja in verschiedenen graustufen vor. kann ich mir anzeigen lassen, in welchen (also welche Graufarben genau enthalen sind)? ICh würde so ein graustufenbild gern in z.B. 2 Farben aufteilen: Aus grau wird schwarz und weiß bleibt weiß. K
Kann ich ein bild auch direkt nur in schwarz/weiß umfärben? (Also den Befehl B=rgb2gray(A); ersetzen).

Noch schöner wäre es, wenn man ein grau stufen bild in 3 kategorien/farben einteilen könnte: Weiß, schwarz und ein schwaches grau. Somit müsste man nicht direkt in nur 2 kategorien einteilen, sondern könnte leichte verfärbungen erstmal einer zwischen kategorie zuordnen.

Besten Dank an Euch!
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: 14.12.2010, 11:47     Titel:
  Antworten mit Zitat      
Wenn Du ein Graustufenbild einliest, zeigt Dir der Workspace die Größe des Bildes an. Wenn das Bild, wie in Deinem Fall, mit der längeren Seite waagerecht liegt, hast Du im größeren Wert die Zeilen und logischerweise im kleineren Wert die Spalten. Die Anzahl der Pixel ergibt sich aus m*n. Bei Farbbilder aus m*n*3.

Die Grauwerte in einem Graustufenbild kannst Du Dir bequem mit der Funktion >> impixelinfo und impixelregion anzeigen lassen.

Die Grauwerte des Bildes liegen zwischen 0 und 255. Daraus kannst Du Bereiche einschränken, in dem Du über einen Schwellwert angibst, welche Werte zu schwarz und welche Werte zu weiß werden sollen. Eine Funktion dazu ist der Befehl: im2bw der auf das Bild X mit einem Schwellwert belegt werden kann. Der Befehl lautet dann: y=im2bw(X,0.5). Weiterhin kannst du jeden anderen Wert auf einen festzulegenden Wert indizieren, also zwangsweise festlegen.

Wenn Du noch Fragen hast, findest Du hier viele Helfer. Viel Spaß.

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
Neme
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.12.10
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 14.12.2010, 15:48     Titel:
  Antworten mit Zitat      
Super, hat mir geholfen!
Kann ich nun auch die Pixel zählen bzw. mir ein mass über das Verhältnis schwarze zu weiße pixel ausgeben lassen?:

1. In dem schwarz / weiß bild durch zählen der schwarzen pixel und geteilt rechnen durch anzahl der gesamt pixel?

2. In dem gray bild durch teilen der Pixel mit einem wert z.B. kleiner als 150 durch die anzahl der gesamtpixel?

Besten Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 14.12.2010, 17:40     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

1. In dem schwarz / weiß bild durch zählen der schwarzen pixel und geteilt rechnen durch anzahl der gesamt pixel?

Code:

numblackpixel = nnz(BW==0); % BW = binary image
ratio = numblackpixel / numel(BW);
 

Zitat:

2. In dem gray bild durch teilen der Pixel mit einem wert z.B. kleiner als 150 durch die anzahl der gesamtpixel?

Code:

numpixel_smaller150 = nnz(GI<150); % GI = gray image
ratio = numpixel_smaller150 / numel(GI);
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neme
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.12.10
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 15.12.2010, 14:03     Titel:
  Antworten mit Zitat      
Vielen Dank!
Einige Fragen aber noch dazu, denn ich kann das so natürlich anwenden, aber könnte es so nicht selbst entwickeln/nachvollziehen:

Der erste Befehl: numblackpixel = nnz(BW==0); % BW = binary image

Wofür steht nnz? Was genau macht das ==0?
(Meine Vorstellung: nnz=irgendwas in richtung "zähle", ==0 --> Die Werte der Bildmatrix die gleich 0 sind, und 0 bedeutet schwarz?)

Numel(Bild); --> Wofür genau steht Numel? Mit Numel lässt sich prinzipiell die Pixelanzahl von Bildern ausgeben?


Dann habe ich noch probiert mir diese Informationen ausgeben zu lassen durch:

fprintf(numblackpixel, ratio);

Das funktioniert nicht, wieso?

Folgendes funktioniert:
fprintf('%-10.4f %-10.4f %-10.4f %-10.4f\n\n\n', numblackpixel, ratio);
Ich habe aber keine ahnung wieso. was bedeutet %-10.4f? Wofür steht n\?


Besten Dank!!!
Private Nachricht senden Benutzer-Profile anzeigen
 
magnuslupos
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 30.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 14:22     Titel:
  Antworten mit Zitat      
für nnz bzw numel hilfe benutzen (help nnz oder doc nnz)
bei dem ausgeben würd ich display nehmen:
Code:

display(['A = ' num2str(numblackpixel) ' B = ' num2str(ratio)])
Private Nachricht senden Benutzer-Profile anzeigen
 
Neme
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 10.12.10
Wohnort: ---
Version: 2008b
     Beitrag Verfasst am: 15.12.2010, 15:20     Titel:
  Antworten mit Zitat      
Super vielen Dank!
Werde nun häufiger die hilfe in Matlab selbst nutzen Smile

wo ist dann de runterschied ob ich numblackpixel = nnz(C); oder numblackpixel = nnz(C==0); mache? Das Ergebnis ist stark verschieden! (ca. 150k gegen 680k gezählte schwarze pixel)

Vielen Dank für die Display hilfe, das schneidet die sinnlosen .0000 meiner zahlen ab Smile

Ist es auch möglich sich diese Informationen direkt auf dem Bild ausgeben zu lassen? Also nach dem Schema: Farbbild einlesen-->grau stufen bild-->schwarz weiß bild-->abspeichern mit den der Ratio Information auf dem Bild als text


Besten Dank für Eure super Hilfe! Werde nun einige Zeit/Jahre mit Matlab zu tun haben, also hier auch sicherlich mein Wissen - wenn denn dann genug vorhanden ist - weitergeben!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.12.2010, 15:37     Titel:
  Antworten mit Zitat      
Neme hat Folgendes geschrieben:


wo ist dann de runterschied ob ich numblackpixel = nnz(C); oder numblackpixel = nnz(C==0); mache? Das Ergebnis ist stark verschieden! (ca. 150k gegen 680k gezählte schwarze pixel)


Hallo, da
NNZ zählt ja alle Elemente, welche ungleich Null sind.
Schwarz entspricht im Matrix der Wert 0
Weiß entspricht 1;

Deswegen zählst du mit Konstrukt: numblackpixel = nnz(C) nicht schwarze sondern weiße Pixel

mit C==0 macht man dagegen erst einen Vergleich, also gezielte Suche nach Nullen. Als Ergebnis bekommt man eine Logische Matrix. An der Stellen im Bild wo Nullen gefunden sind, sind in logischer Matrix dagegen jetzt Einser.
Deswegn mit dem Konstrukt numblackpixel = nnz(C==0) wird wirklich nach schwarzen Pixeln gesucht. Man kann es z.B. numblackpixel = sum(sum(C==0)) nachprüfen.


zur Ausgabe auf dem Bild schau dir die Funktion TEXT in der Hilfe an.
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 15.12.2010, 16:57     Titel:
  Antworten mit Zitat      
Hallo,

Codebeispiel:

Code:

BW = im2bw(imread('rice.png'));
numblackpixel = nnz(BW==0);
ratio = numblackpixel / numel(BW);
figure,imshow(BW);
text(round(size(BW,1)/2),round(size(BW,2)/2),sprintf('%s%.2f','ratio = ',ratio),'Color',[1 0 0],'Fontsize',16);
 


MFG

Sco
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.