FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Bildverarbeitung: Kantenstärkung funktioniert nicht.

Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-05 14:38
Connor
http://www.roboternetz.de/wissen/index.php/Bildverarbeitung_Tutorial

durch eine Matrix 1.Zeile (0 -1 0) 2.Zeile(-1 4 -1) 3.Zeile (0 -1 0)
soll angeblich die kante verstärkt werden.
Bei mir siehts so aus wie ein Bild auf ein Fernseher der keinen Empfang hat. Halt nur diese Schwarzweiß gepunktete Muster

public static short[][] kantenStärkung(SWBild swbild)
{
int hoehe = swbild.gibHoehe();
int breite = swbild.gibBreite();
short[][] bilddaten = swbild.gibBilddaten();
short[][] bilddaten2 = swbild.gibBilddaten();
int zwischenspeicher = 0;
for (int y = 1; y < hoehe-1; y++)
{
for (int x = 1; x < breite-1; x++)
{
// Hier wird die oben genannte Matrix benutzt
zwischenspeicher =
(4*bilddaten[y][x])-bilddaten[y-1][x]-bilddaten[y+1][x]-bilddaten[y][x-1]-bilddaten[y][x+1];
bilddaten2[y][x] = (short) zwischenspeicher;
}
}
return bilddaten2;
}


Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-05 14:47
Fred
Probier mal:
zwischenspeicher = bilddaten[y][x]; zwischenspeicher *= 4; zwischenspeicher -= bilddaten[y-1][x]; zwischenspeicher -= bilddaten[y+1][x]; zwischenspeicher -= bilddaten[y][x-1]; zwischenspeicher -= bilddaten[y][x+1]; bilddaten2[y][x] = (short) zwischenspeicher; Sieht das besser aus?

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-05 15:19
Connor
um einiges. danke^^

scheiss java syntax

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-05 15:50
Fred
Mit Syntax hat das eigentlich gar nichts zu tun. Das Problem war, dass Du nur mit shorts gerechnet hast.

…zumindest glaube ich das [img]http://www.fb18.de/gfx/23.gif[/img]

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-06 10:56
Connor
verdammt ich hab die falschen operationen ausgeführt es gibt doch noch das rauschen trotz des umschriebens der rechnung tt

edit: bei der kantenglättung hatte ich durch 9 teilen vergessen mal sehn obs bei der stärkung auch hilft

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-17 14:19
Connor
Der Fehler lag daran das Referenzen gemacht werden
short[][] bilddaten = swbild.gibBilddaten();
short[][] bilddaten2 = swbild.gibBilddaten();

bilddaten2[y][x] = zwischensumme; Daraus folg aber auch bilddaten[y][x] == zwischensumme was unerwünscht war

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-17 14:37
Fred
Die Referenzen werden sicherlich nicht gemacht, die sind ja schon da. Ist aber ein Hammer, dass eine Methode einfach so Zugriff auf den internen Zustand des Objekts zulässt.

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-18 17:29
Connor
finde ich auch seltsam. dafür wurde ja eigentlich das objektorientierte erfunden. Vieleicht wird ja auch einfach aus "Faulheit" beiden anfragen der gleiche Speicherplatz zugeordnet, was ich ziemlich bescheuert fände

Re: Bildverarbeitung: Kantenstärkung funktioniert nicht. 2006-01-18 18:04
Connor
short[][] bilddaten3 = swbild.gibBilddaten();
short[][] bilddaten = new short[hoehe][breite];

sind die 2 möglichkeiten die ich hab ein array mit hoehe *breite hinzusetzen. aber wenn ich ersteres mache dann änder sich durch änderung an bilddaten3, swbild mit… das kanns doch nun wirklich nicht sein

habs extra in der main ausgeklammert
//bild.setzeBilddaten(
Bildmodifikation.kombiSobel(bild)//);

damit genau das nicht gemacht wird es passiert aber trotzdem