Image Thinning

B00bietrap

Mitglied
Tudiluu liebe Mitprogrammierer

Ich arbeite zur zeit viel mit visio programmen in Java.
Programmiere zur zeit ein ObjekterkennungsProgramm.
Dazu wollte ich einen Thinning Algorithmus verwenden... so, da hapers. Es sind vereinzelt Java Thinning programme zu finden.. die schiessen aber weit über mein ziel hinaus. Brauche etwas Kompaktes.

Hab dazu n bissle im Buch Mashine Vision gewühlt und das Thinning gefunden. leider ohne code.. nur ein unverständlicher text wie man ein Bild Blury macht.

Irgendie sollte der Folgende Code so geändert werden um daraus ein Thinning aglo zu machen.
Momentan macht der Algo von aussen nach innen eine grauskallierung aber in der mitte wäre das Prinzip des Thinning vorganden... wenn nur die Grauskallierung nich wäre^^

Jemand ne idee was da geänder werden muss?
oder hat allgemein nen besseren code?

greets B00bie

Java:
BufferedImage img = ImageIO.read(new File("C:/Dokumente und Einstellungen/siegt5/Desktop/ThinningTest.jpg"));
        int height = img.getHeight(), width = img.getWidth();

        int greyLevel = 0;
        boolean done = false;
        //BufferedImage img2 = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
        //IMAGE COPY
        for (int y = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                img2.setRGB(x, y, img.getRGB(x, y));
            }
        }


        while (!done && greyLevel < 0xFFFFFF)
        {
            greyLevel++;
            done = true;



            // pixel deklaration
            for (int y = 1; y < height - 1; y++)
            {
                for (int x = 1; x < width - 1; x++)
                {
                    int a1 = img.getRGB(x - 1, y - 1);
                    int a2 = img.getRGB(x, y - 1);
                    int a3 = img.getRGB(x + 1, y - 1);

                    int b1 = img.getRGB(x - 1, y);
                    int b2 = img.getRGB(x, y);
                    int b3 = img.getRGB(x + 1, y);

                    int c1 = img.getRGB(x - 1, y + 1);
                    int c2 = img.getRGB(x, y + 1);
                    int c3 = img.getRGB(x + 1, y + 1);
                    if (b2 == 0xFFFFFF)
                    {
                        int z = Math.min(c3, Math.min(Math.min(Math.min(a1, a2), Math.min(a3, b1)), Math.min(Math.min(b2, b3), Math.min(c1, c2))));
                        if (z != greyLevel && z != 0xFFFFFF)
                        {
                            img2.setRGB(x, y, greyLevel);
                            done = false;
                        }
                    }
                }
            }
        }


        saveJPG(img2, "C:/Dokumente und Einstellungen/siegt5/Desktop/test.jpg");
 
Zuletzt bearbeitet:

muckelzwerg

Bekanntes Mitglied
Ich will nicht meckern, aber kann es sein, dass Du noch nicht genug Ahnung von Bildverarbeitung hast?
Du meinst doch sowas:
Edge Thinning Used in the SUSAN Edge Detector
oder?
Dafür nimmst Du einen 3x3 Kern (die 9 Zeilen in der Schleife laden die pixeldaten)
läufst damit über das gesamte Bild (das ist die Schleife)
und bewertest jeden Punkt (das ist die berechnung von z / die anwendung des kerns)
Aus dessen Bewertung ermittelst Du, was mit ihm geschieht. Löschen, behalten usw. Ist ein bisschen wie Conways Game of Life.

Viele dieser Verfahren arbeiten mit Graustufenbildern, weil es einfacher ist und meist keine (relevante) Information verlorengeht.
Das Ergebnis so einer Filterung muss kein direkt zeichenbares Bild sein, sondern kann wieder als Tabelle für weitere Berechnungen genutzt werden.

Wenn Du solche Verfahren besprechen willst, solltest Du Vorher-Nachher-Bilder dazulegen, damit man nicht raten muss, was dieser Minimierungsfilter dort tut.
Jedenfalls nicht das, was Du willst, deswegen muss Du einen "Operator", also eine andere Formel verwenden.
Und wohl auch einen etwas anderen Ablauf. Wo hast Du den aktuellen Filter denn her?

Solche Algorithmen sind nicht "einfach". Du wirst da nicht weit kommen, ohne es richtig zu lernen.
 

B00bietrap

Mitglied
*Hust* Ich bin absoluter neuling in der Bildverarbeitung... muss aber ne Arbeit damit machen und an manchen stelen haperts n bissl^^
Es sollte ein Thinning oder skelettierungs algorithmus werden.
Die grundlage ist aus dem Buch "Machine Vision. Algorithms in Java" ausm 01.
Mein code ist eigentlich ein algo um eine Grass.Fire transformation zu machen. also das ein objekt am rand entlang eine graustufe bekommt.
Aus diesem sollte es lauf Buch möglich sein ein thinning Algo zu schreiben. allerdings is die beschreibung auf english und dazu auchnoch sehr schlecht >.<

Hab jetzt aber bemerkt, dass .getxy(xy) aus much nicht die gleichen zahlen ausspuckt wie .getRGB(x,y)... daher ist mein code unnütz >.<

Konnte ein skelletierungs programm aus der ImageJ Linrary verwenden.
daher kann ich diesen thread als "erledigt" markieren.

Danke fürs reinschaun
 

muckelzwerg

Bekanntes Mitglied
Dein Algorithmus bezieht sich vermutlich auf ein Graustufenbild, richtig?
Mit getRGB() bekommst Du dann aber nicht den Helligkeitswert, sondern den gemischten Farbwert der drei Komponenten.
Deswegen sollte auch der Graufilter so nicht korrekt funktionieren.

Mit dem "Steppenfeuer" erzeugst Du sowas:
Grassfire Transform - Wikipedia, the free encyclopedia
und das lässt sich dann für die Skeletierung nutzen.
Aber jetzt hast Du ja was gefunden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
Y Wie bekomme ich durch getImage an das Image heran? Allgemeine Java-Themen 1
J jsch direktes streamen in ein image Allgemeine Java-Themen 11
A 2D-Grafik Einfachster Ansatz, um sich wiederholende Figur in einem 2D-Image zu erkennen Allgemeine Java-Themen 1
T 2D-Grafik Chart als Image erstellen Allgemeine Java-Themen 3
G Image in Shape wandeln Allgemeine Java-Themen 1
T Swing Image rotieren Allgemeine Java-Themen 1
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
C pfad vom Image ausgeben lassen Allgemeine Java-Themen 5
Bananabert Swing jtree : image als user object Allgemeine Java-Themen 2
M Image auslesen Allgemeine Java-Themen 2
G Pixelanzahl aus Raw Image Datei Allgemeine Java-Themen 1
H OCR und Image Processing Allgemeine Java-Themen 4
M Image für PDF nicht verfügbar - Runnable .jar Allgemeine Java-Themen 3
S BLOB Image in JSP anzeigen Allgemeine Java-Themen 5
BRoll Image RGB Werte auslesen und vergleichen Allgemeine Java-Themen 8
K Image zu BufferedImage konvertieren Allgemeine Java-Themen 9
K Image beim catchen ist immer null Allgemeine Java-Themen 9
X Image Processing libary für JavaSE und Android Allgemeine Java-Themen 2
Crashbreaker RCP-View Image öffnen und darstellen Allgemeine Java-Themen 7
S IMAGE ARRAY laden Allgemeine Java-Themen 6
B Image oder GridControl? Allgemeine Java-Themen 8
A Input/Output Buffered Image zu Byte Array und zurück konvertieren Allgemeine Java-Themen 4
F Datentypen Floppy-Image-Dateisystem Allgemeine Java-Themen 5
F Image - Ausschnitt bekommen Allgemeine Java-Themen 3
J Teil eines Image/ImageIcon zeichnen Allgemeine Java-Themen 2
N Unable to convolve src image Allgemeine Java-Themen 7
H image in jtextarea/JLabel einbinden... Allgemeine Java-Themen 4
Aigu Bilderkennung / Image Analysis Allgemeine Java-Themen 2
M Nochmal I-Frame zu Image Allgemeine Java-Themen 4
M JPEG Image komprimieren Allgemeine Java-Themen 2
M Probleme mit Image Extraction aus PDF Allgemeine Java-Themen 2
V Image laden - URL über ClassLoader ermitteln Allgemeine Java-Themen 2
G sun.awt.image.OffScreenImage Serializable machen Allgemeine Java-Themen 5
T Image in gif umwandeln Allgemeine Java-Themen 14
G itext größe von image Allgemeine Java-Themen 2
T JPanel to Image? Allgemeine Java-Themen 6
K Image Resizer Allgemeine Java-Themen 4
D Image runterscalieren, aber schlechte Quali? Allgemeine Java-Themen 3
L Buffered Image teilweise zeichnen Allgemeine Java-Themen 6
P Image erzeugen Allgemeine Java-Themen 7
B Image libraries Allgemeine Java-Themen 3
MQue Image über Komponente Allgemeine Java-Themen 3
P Image auf JPanel auf JFrame Allgemeine Java-Themen 3
P Image auf einem Panel mit null-Layout Allgemeine Java-Themen 8
E Image unterscheiden Allgemeine Java-Themen 16
E Image auf einem JLabel darstellen Allgemeine Java-Themen 3
F BufferedImage -> Image Allgemeine Java-Themen 4
E Wie bekomme ich mein Image in das Fenster Allgemeine Java-Themen 2
T Muster/Zeichen/Texterkennung auf einem Image Allgemeine Java-Themen 9
L Linien, Recktecke und Elipsen zeichnen ohne Image Allgemeine Java-Themen 2
T Disk Image Library (iso,mdf,nrg,bin) Allgemeine Java-Themen 6
S KeyListener! Image Problem! Allgemeine Java-Themen 2
S Image als Background Allgemeine Java-Themen 5
B Image(png) versenden Allgemeine Java-Themen 3
N Image -> cropImage Allgemeine Java-Themen 3
T Image mithilfe von DirectColorModel und Pixel erstellen Allgemeine Java-Themen 3
G Image in der Größe ändern Allgemeine Java-Themen 2
C probleme mit image Allgemeine Java-Themen 4
C Pixelfarbe aus einem image auslesen Allgemeine Java-Themen 6
M Image Skalieren Allgemeine Java-Themen 23
D ByteArray für Image-Icon laden. Allgemeine Java-Themen 4
T iso datei (Image) mit Java einlesen und Inhalt entpacken Allgemeine Java-Themen 3
O Image mit transparenten farben wie bei *.GIF ? Allgemeine Java-Themen 3
B Image#getScaledInstance & Graphics2D#drawImage ClassCast Allgemeine Java-Themen 3
H Speicher freigeben klappt nicht bei Image Objekten, warum? Allgemeine Java-Themen 8
H Skalieren von Image -> java.lang.OutOfMemoryError - WARUM Allgemeine Java-Themen 18
T Auf ein Image geklickt Allgemeine Java-Themen 13
J ISO image erzeugen Allgemeine Java-Themen 3
J Wie mache ich den Hintergrund einer Image durchsichtig? Allgemeine Java-Themen 7
G Aus JPanel Image Hohlen Allgemeine Java-Themen 3
D BufferedReader in image umwandeln Allgemeine Java-Themen 3
S Image Datei serializieren Allgemeine Java-Themen 3
G JFrame nimmt mein Image nicht Allgemeine Java-Themen 2
F Image als GIF oder JPEG abspeichern Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben