# Graustufenbild in Binärbild umwandeln



## castor (10. Mrz 2009)

Hallo,

ich bin schon leicht am verzweifeln.

Problem: Ich habe ein Graustufenbild und würd dies gerne in ein Binärbild umwandeln.

Hat jemand eine Idee wie man dieses machen kann? Oder hat das schon mal wer gemacht und kann mir freundlicher weise den Code zeigen?

Vielen Dank schon mal,
jens


----------



## gizmo (10. Mrz 2009)

Was ist ein Binärbild?


----------



## Spacerat (10. Mrz 2009)

Hab' ich schon mal in PHP gemacht, sofern mit Binärbild Schwarz-Weiss gemeint ist. Dazu muss ein Schwellwert angegeben werden, ab wann eine Graustufe weiss und ab wann eine Graustufe schwarz ergeben soll.


----------



## Soulfly (10. Mrz 2009)

Du möchtest ein einfaches Schwarzweiß bild daraus machen?

Das geht doch relativ einfach,

- schleife über alle Pixel
- check auf jeden Pixel, ob eine beliebige Grenze an Intensität überschritten wird
- Entweder auf weiß oder schwarz setzten
- wenn fertig, dann speichern

So schwer finde ich das nicht.

So Long,


----------



## 0x7F800000 (10. Mrz 2009)

Setzst beliebig eine grenze fest, gehst jeden pixel durch, stellst fest ob der jeweilige wert die festgesetzte grenze überschreitet, färbst den pixel dementsprechend als "true" oder "false"... Wenn du Spaß dran hast, dann kannst du noch die API durchlesen, und guggen was du da für tolle Interfaces an so einen Binarizierungs-Filter drankleben kannst, um's ein wenig hübscher zu machen.


----------



## Ebenius (10. Mrz 2009)

Ich gehe einfach mal davon aus, dass der Themeneröffner ein Halbtonverfahren nutzen möchte, und nicht nur nearest value, oder? Nicht dass ich da ohne nachlesen helfen könnte... 

Ebenius


----------



## Ebenius (10. Mrz 2009)

Bitte nicht zwei Themen mit dem selben Inhalt in zwei Unterforen öffnen!  Hatte das einen tieferen Sinn? Ich habe die Themen zusammengeführt und den doppelten Eingangsbeitrag gelöscht. Schreib mir eine Nachricht, wenn Du das Thema verschoben haben möchtest!


----------



## castor (10. Mrz 2009)

ja sry für den doppel Post, hab mich vertan mit dem Überthread.

Also zum Bild.

ich habe imo ein normales Image(Graustufenbild) und möchte ein Bild rausbekommen, in dem nur 1 und 0 vorkommt. Damit ich später Berechnungen durchführen kann(mit dem Bild). 0 = weiss und 1 = schwarz

Kann ich ein Graustufenbild pixelweise durchgehen? Wahrscheinlich ja(denke ich).

danke,
jens


----------



## 0x7F800000 (10. Mrz 2009)

Hier steht sogar der fertige code:
PixelGrabber (Java Platform SE 6)
Allerdings weiß ich schon wieder nicht, ob die klasse aktuell ist, oder ob es da irgendwas signifikant besseres gibt, aber Ebenius wird notfalls eingreifen und uns erbärmlichen noobs erzählen wie es richtig geht, hoffe ich doch


----------



## Marco13 (11. Mrz 2009)

Aktueller sind sie Sachen, die man findet, wenn man von BufferedImageOp (Java Platform SE 6) losbrowst. Im speziellen könnte man da eine LookupOp (Java Platform SE 6) verwenden, wo man die LookupTable so implementiert, dass sie einen Threshold enthält und Schwarz oder Weiß zurückliefert. Hier new LookupOp(LookupTable lookup, RenderingHints hints) : LookupOpjava.awt.imageJava by API gibt's auch ein kleines Beispiel, an dem man sich da ggf. orientieren kann. 

Die Option, einfach mit zwei ineinander Verschachtelten Schleifen durch das Bild zu laufen, und bit getPixel/setPixel die Pixel zu ändern, sollte man aber nicht außer Acht lassen.


----------



## castor (11. Mrz 2009)

Schon mal vielen Dank für die Antworten 

Threshold habe ich in meinem Programm schon implementiert. Und das Bild speiche ich als Graustufenbild.

Im nächsten Schritt bin ich dabei "Dilation" einzuwerkeln.

Und um diese Operation durchzuführen, ist ein Binärbild von nöten.


Noch mal zum Verständnis: Wenn ich das Graustufenbild umgewandelt habe und abspeicher, dann steht das Bild in einem Array? Und ist nicht etwa eine neue Datei?

Grüße,
jens


----------



## Marco13 (11. Mrz 2009)

Falls ich die Frage richtig interpretiert habe: Ein BufferedImage liegt erstmal nur im Speicher (nicht direkt als "Array", aber indirekt). Solange man nicht ImageIO.write oder ähnliches macht, wird nichts auf die Platte geschrieben...


----------



## 0x7F800000 (11. Mrz 2009)

castor hat gesagt.:


> Im nächsten Schritt bin ich dabei "Dilation" einzuwerkeln.


Was'n das für ein Tier, kann das grad gar nicht einordnen? ???:L


----------



## Soulfly (12. Mrz 2009)

Heißt eigentlich Dilatation 
Grundsätzlich funktioniert es so:

- man hat z.B. einen 4x4 Kernel mit einer als Zentrum markierten Zelle
- Dieser Kernel wird über das Bild wandern und wird in diesem 4x4 feld den maximalen wert aus diesem Bereich im Zentrum speichern
- immer weiter und weiter und bei SchwarzWeiß bilder wird sich eine schwarze Fläche ausbreiten

Das Gegenstück zu Delatation heißt Erosion und nimmt das Minimum.


----------



## 0x7F800000 (12. Mrz 2009)

Aaah, interessant. Ein Begriff mehr im Speicher...


----------

