Bild im Zentrum spiegeln

Kirby.exe

Top Contributor
Ich soll einen "Operator" schreiben welcher ein Bild im Zentrum punktspiegelt. Ich verstehe jedoch nicht ganz wie ich vorgehen könnte.

Ich hätte mir jetzt gedacht, dass ich mir Länge und Breite des Bildes hole und am Punkt x= laenge/2, y = breite/2 spiegele.

BTW die Bibliothek heißt Mitobo xD
 

httpdigest

Top Contributor
Also, ohne die Library zu kennen, kannst du dir ja eine Funktion herleiten, die dir ausgehend von einem Zielpixel, den du berechnen willst, den zugehörigen gespiegelten Quellpixel ermittelt:


Wenn wir also eine Funktion "R" auf den Pixeln definieren, die bei einer Punktspiegelung/Rotation um den Pivotpunkt (Cx, Cy) für jeden Pixel (x, y) des Ergebnisbildes definiert, von welchem Pixel des Quellbildes er "kommt", dann:

Code:
  R(x, y, Cx, Cy)
= P(x+(Cx-x)*2, y+(Cy-y)*2)
= P(2Cx-x, 2Cy-y)

Wenn wir für (Cx, Cy) dann einfach das Zentrum (width/2, height/2) des Bildes einsetzen, ergibt sich:
Rc(x, y) = P(width-x, height-y)
 

Kirby.exe

Top Contributor
Ohne großes Verständniss hiervon zu haben xD Könnte es sein dass die Information in einem "2D" Byte Array gespeichert werden und ich im Grunde einfach nur ein neues Byte Array erzeugen muss in die Werte so hinein kopieren, dass eine Punkspiegelung vorliegt?
 

httpdigest

Top Contributor
Könnte es sein dass die Information in einem "2D" Byte Array gespeichert werden und ich im Grunde einfach nur ein neues Byte Array erzeugen muss in die Werte so hinein kopieren, dass eine Punkspiegelung vorliegt?
Vermutlich ja. Aber keine Ahnung, welche wilden Abstraktionsschichten die Library noch dadrauflegt. Im Zweifel hast du vielleicht nur einen abstrakten Datentyp mit Operationen wie "hole Pixel bei (x,y)" und "schreibe Pixel (x,y)".
 
K

kneitzel

Gast
Also was Du genau machen musst, wird dir hier kaum jemand sagen können fürchte ich, denn die Chance, dass jemand schon mit Mitobo gearbeitet hat, ist sehr klein.

Aber ehe man auch nur eine Zeile Code schreiben kann, sollte man das Environment und die Aufgabe genau verstanden haben. Der Schritt scheinst du (fast) komplett übergangen zu haben...

Wenn ich mir MiToBo ansehe, dannfinde ich da auf GitHub diverse Dinge. So bin ich z.B. über Filter Implementierungen gestolpert (anders kann man es nicht ausdrücken - ich habe da einfach mal im Code rumgeklickt) und die Filter überschreiben MTBOperator. Also wenn da irgendwie von Operator die Rede ist, dann ist das evtl., was du dir ansehen solltest...


Die eigene Image Implementierung mag de.unihalle.informatik.MiToBo.core.datatypes.images.MTBImage sein... aber das habe ich mir noch nicht im Detail angesehen. Das ist etwas, das Du Dir im Detail ansehen solltest um zu verstehen, was dieses Tool (Es ist keine Bibliothek - es ist ein ganzes Toolset so wie ich es sehe) überhaupt macht.
 

Kirby.exe

Top Contributor
Also ich wühle parallel dort in der Docu herum und habe auch bereits ein "template" bekommen:

Java:
/*
 * This file is part of MiToBo, the Microscope Image Analysis Toolbox.
 *
 * Copyright (C) 2010 - 2020
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Fore more information on MiToBo, visit
 *
 *    http://www.informatik.uni-halle.de/mitobo/
 *
 */

package einfBV.serie_00.aufgabe_2;

import de.unihalle.informatik.Alida.exceptions.ALDOperatorException;
import de.unihalle.informatik.Alida.annotations.ALDAOperator;
import de.unihalle.informatik.Alida.annotations.ALDAOperator.Level;
import de.unihalle.informatik.Alida.annotations.Parameter;
import de.unihalle.informatik.MiToBo.core.datatypes.images.*;
import de.unihalle.informatik.MiToBo.core.operator.*;

/**
 * Operator to invert and/or flip an image.
 */

// This annotation is necessary for MiToBo to automatically index the operator.
@ALDAOperator(genericExecutionMode=ALDAOperator.ExecutionMode.ALL,
        level=Level.APPLICATION)
public class MiToBoTransformImage extends MTBOperator {

    /**
     * 8-bit input image.
     */
    @Parameter( label= "Input Image", required = true, dataIOOrder = 0,
        direction = Parameter.Direction.IN, description = "Input image.")
    private MTBImageByte inImg = null;

    /**
     * Flag to invert the image.
     */
    @Parameter( label= "Invert image", required = true, dataIOOrder = 1,
        direction = Parameter.Direction.IN, description = "Flag for inverting image.")
    private boolean doInvert = true;

    /**
     * Flag to flip the image.
     */
    @Parameter( label= "Flip image at center", required = true, dataIOOrder = 2,
        direction = Parameter.Direction.IN, description = "Flag for flipping.")
    private boolean doFlipping = true;

    /**
     * Contains inverted input image, if option is enabled.
     */
    @Parameter( label= "Inverted image", required = true,
            direction = Parameter.Direction.OUT, description = "Inverted image.")
    private MTBImageByte invertedImg = null;

    /**
     * Contains the flipped image, if option is enabled.
     */
    @Parameter( label= "Flipped image", required = true,
            direction = Parameter.Direction.OUT, description = "Flipped image.")
    private MTBImageByte flippedImg = null;

    /**
     * Default constructor, always required even if nothing happens here!
     *  @throws ALDOperatorException
     */
    public MiToBoTransformImage() throws ALDOperatorException {
        // nothing to do here
    }       

    /**
     * This method does the actual work and is mandatory.
     */
    @Override
    protected void operate() {
        if(this.doFlipping) {
            int x = this.inImg.getSizeX()/2;
            int y = this.inImg.getSizeY()/2;
            
        }
        
        if(this.doInvert) {
            
        }
        
        
    }
}

Der Type ist ziemlich sicher MTBImageByte
 
K

kneitzel

Gast
Wobei das ja nur speziellere Klassen sind von MTBImage und MTBImage bietet eine Funktionalität den Typ zu ändern...

Was mich etwas irritiert ist, dass da mit 5 Dimensionen gearbeitet wird? Du hast ja getValueInt / putValueInt - die könnte man ggf. nutzen um Punkt für Punkt alles durch zu gehen. Aber die 4te und 5. Dimension ist etwas irritierend. Die Methoden gibt es auch nur mit x,y,z aber da wird dann die aktuelle Z -Stack Koordinate genutzt ... Das erwähne ich nur, weil es da wohl etwas mehr gibt, was man bezüglich der Benutzung wissen sollte. Es gibt nicht nur das typische Bild mit x und y. Und das auch nicht nur in Layern - das ist noch auf 5d erweitert... Damit hat man da etwas, das man verstanden haben sollte. Evtl. ist es trivial und einiges wird einfach nicht genutzt oder kann ignoriert werden, aber man sollte verstehen, was da an Daten vorgehalten wird und was damit geschehen sollte ...

Spiegeln an einem Punkt bei einem 2D Bild wurde erläutert. Aber wie sieht es bei 3D aus? Wenn es einfach nur Layer sind die übereinander gelagert werden, dann ist es trivial: Alle Layer bleiben in der Reihenfolge und jeder Layer wird für sich gespiegelt. Bei einer 3D Ansicht wäre das aber falsch - dann wäre auch im 3D Bereich zu tauschen ...

Das wären da meine Gedanken, nach wenigen Minuten Code betrachten. Vielleicht hilft es ja etwas.
 

httpdigest

Top Contributor
Prinzipiell ist die Idee richtig: Rotation um 180° um Punkt (cx, cy):

1. Translation um (-cx, -cy)
2. Skalierung (-1, -1) wie von dir vorgeschlagen
3. Translation um (cx, cy)

(wenn man in Koordinaten ausserhalb des Bildbereiches temporär arbeiten kann)
 

mihe7

Top Contributor

Kirby.exe

Top Contributor
Update:

Ich habe es geschafft das Bild korrekt zu spiegeln. Nun hab ich ein gewisses Problem...Ich muss das geflippte Bild der Variable "flippedImg" zuweisen...Diese ist vom Typ MTBImageByte, mein Bild ist aber ein MTBImage. Durch einen cast würde es ein graustufen bild(8 Bit) werden. Das möchte ich ungern :) Gibt es da einen Trick?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Habe ein svg bild, kann ich das zu svg koordinaten umrechnen, damit ich den Umriss zeichnen kann? Wenn ja wie? Allgemeine Java-Themen 1
berserkerdq2 Wenn ich einfach eine GIF in den Scenebuilder als Bild reinpacke, wird das dann asl Gif angezeigt Allgemeine Java-Themen 1
OnDemand Prüfen ob Bild defekt ist Allgemeine Java-Themen 4
Y Bild in JPanel setzen Allgemeine Java-Themen 2
I Apache POI Bild in Word ersetzen Allgemeine Java-Themen 15
OnDemand Bild prüfen ob defekt Allgemeine Java-Themen 3
L Input/Output Kassenzettel lesen aus einem Bild Allgemeine Java-Themen 2
K Bild in einem anderen Bild suchen Allgemeine Java-Themen 12
R Compiler-Fehler Bild per E-Mail versenden Allgemeine Java-Themen 3
M Java- Bild gewissen Anzahl von Sekunden anzeigen?! Allgemeine Java-Themen 4
RalleYTN 2D-Grafik Bild mit bilinearer Interpolation skalieren Allgemeine Java-Themen 31
RalleYTN 2D-Grafik Bild ohne AWT, Swing und JavaFX rotieren Allgemeine Java-Themen 12
S Telefonbuch mit Bild Allgemeine Java-Themen 4
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
Tacofan GIF-Bild wird "zerstört" Allgemeine Java-Themen 3
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
T Neuen Kanal in Bild (TIFF) einfügen à la Photoshop Allgemeine Java-Themen 2
Z Zahlen aus Bild auslesen Allgemeine Java-Themen 1
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
E 3D Objekte in 2D Bild finden Allgemeine Java-Themen 5
R HtmlUnit: Canvas als Bild speichern Allgemeine Java-Themen 0
E am häufigsten vorkommenden Farben aus einem Bild Allgemeine Java-Themen 5
S Bild in Raster Allgemeine Java-Themen 1
S Bild in Frame Allgemeine Java-Themen 0
F Punkte in einem Bild finden Allgemeine Java-Themen 10
A Bild aufteilen für getData Allgemeine Java-Themen 3
P Wie füge ich ein Bild in die GUI ein? Allgemeine Java-Themen 7
F ImageJ: Linien und Schnittpunkte in Bild Allgemeine Java-Themen 1
A mit getClassLoader Bild laden Allgemeine Java-Themen 8
E Bild abspeichern Allgemeine Java-Themen 5
D Face.com - Gesicht im Bild finden Allgemeine Java-Themen 3
N Input/Output Bild von WebSite laden? Allgemeine Java-Themen 3
A Input/Output Bild in Java einlesen und analysieren! Allgemeine Java-Themen 8
S programm um bild auszulesen Allgemeine Java-Themen 2
R Bild offenbar zu groß um geladen zu werden? Allgemeine Java-Themen 12
K Quadrat in einem Bild erkennen Allgemeine Java-Themen 33
B Bild verschieben Allgemeine Java-Themen 6
T Bild in jar Paket einbinden Allgemeine Java-Themen 9
D Bild Typ bestimmen Allgemeine Java-Themen 9
0 2D-Grafik Bild einfärben Allgemeine Java-Themen 8
A Bild zusammenbauen! Allgemeine Java-Themen 5
A Bild von Webcam aufzeichnen Allgemeine Java-Themen 14
V 2D-Grafik Bild transparent machen. Allgemeine Java-Themen 4
H Bild einscannen und speichern Allgemeine Java-Themen 29
E Bild mit Listener einfügen Allgemeine Java-Themen 3
B Bild in String einbauen? Allgemeine Java-Themen 3
C Bild auf HDD speichern Allgemeine Java-Themen 4
X Bild aus dem Netz von URL runterladen und in GUI einbinden. Allgemeine Java-Themen 3
F Bild (Point) mit scrollen lassen Allgemeine Java-Themen 5
R Texterkennung - Text aus einem/r Bild/Grafik auslesen Allgemeine Java-Themen 2
B Bild- und Texterkennung Allgemeine Java-Themen 4
S Tracing eines Bildes (a.ka. Bild vektorisieren)..? Allgemeine Java-Themen 2
destroflyer *.dds-Bild anzeigen Allgemeine Java-Themen 12
F Bild aus externer Quelle laden und Skalieren? Allgemeine Java-Themen 11
X Bild im Memory zwischen speichern Allgemeine Java-Themen 11
R JAI - RGB Bild in 3 Einzelbilder zerlegen Allgemeine Java-Themen 4
P Ascii Bild aus einem input file nur kommt nix im outputfile an?????? Allgemeine Java-Themen 5
A Möglichkeiten, ein Bild schnell auszuwerten Allgemeine Java-Themen 56
D Java Thread, Bild wird nur am Ende gezeichnet Allgemeine Java-Themen 5
K Zeichnen auf ein Bild und Scrollen Allgemeine Java-Themen 7
data89 Barcodes in Bild erkennen Allgemeine Java-Themen 17
S Bild anhand von Koordinaten einteilen Allgemeine Java-Themen 7
K Transparente Bilder in Bild positionieren und speichern. Allgemeine Java-Themen 5
W Bild Spiegeln, aber Originalbild ausblenden Allgemeine Java-Themen 2
B Bild wird nicht angezeigt. Allgemeine Java-Themen 10
Developer_X Avatar/Bild ins Profil einbinden Allgemeine Java-Themen 10
C Bild in .txt speichern und wieder als Bild speichern Allgemeine Java-Themen 2
D Bild in text tabelle umwandeln Allgemeine Java-Themen 2
G bild in package Allgemeine Java-Themen 6
MQue bild zoomen Allgemeine Java-Themen 2
R Farbe im Bild ersetzen Allgemeine Java-Themen 11
R PDF einlesen und als Bild abspeichern Allgemeine Java-Themen 8
P Bild aus dem Internet speichern Allgemeine Java-Themen 4
K Schreiben von Bildern: Bild bleibt leer Allgemeine Java-Themen 7
ARadauer Bild verkleinern. Allgemeine Java-Themen 9
F Bild (File) komplett serialisieren Allgemeine Java-Themen 9
H Wie erstelle ich ein Bild ( GeoTIFF ) ? Allgemeine Java-Themen 2
Ark Bild immer als ARGB laden Allgemeine Java-Themen 2
N Hochgeladenes Bild verkleinern und speichern Allgemeine Java-Themen 2
N Graphics2D als Bild abspeichern Allgemeine Java-Themen 6
M bild verkleinern Allgemeine Java-Themen 9
MQue svg- Bild Allgemeine Java-Themen 34
S JPEG Bild übertragen mit RMI ? Allgemeine Java-Themen 4
V Wie kann ich ein Bild in einem Zip Archiv abspeichern? Allgemeine Java-Themen 3
ToNyXXL Als Mauszeiger eigenes Bild verwenden! Allgemeine Java-Themen 3
M bild erkennung Allgemeine Java-Themen 2
S Bild durchs Label laufen Allgemeine Java-Themen 14
T Bild verliert Inhalt. Allgemeine Java-Themen 6
T Icon -> Bild einladen Allgemeine Java-Themen 18
G Bild neu zeichnen Allgemeine Java-Themen 13
S Bild Größe verändern Allgemeine Java-Themen 2
R Bild flackert nach Java-Install - nur bei Laufschriften. Allgemeine Java-Themen 2
H Bild base64encode als String Allgemeine Java-Themen 9
S Bild aus Zwischenablage in Applet einfügen Allgemeine Java-Themen 2
T Ich bin unfähig ein Bild relativ zu addressieren ... Allgemeine Java-Themen 12
D JPEGEncoder -> Schwarz Weiß Bild Allgemeine Java-Themen 2
M Eingelesene Bild wird automatisch skaliert Allgemeine Java-Themen 4
R Bild wird trotz allem einfach nicht angezeigt. - AHHHHH!!!!! Allgemeine Java-Themen 30
R Bild downloaden und darstellen lassen Allgemeine Java-Themen 5
R Bild downloaden und dann Applet ausfüllen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben