Skip to content
Snippets Groups Projects
Commit 03640387 authored by Dario Wagner's avatar Dario Wagner
Browse files

alles hochladen habibi

parent c7a56480
No related branches found
No related tags found
1 merge request!1Lmao
Source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
MaPra
Zur Aufgabe: B i l d b e a r b e i t u n g
=================================
AUFGABEN:
---------
Die folgenden Aufgaben sollen von Ihnen bearbeitet werden, um die Funktions-
fähigkeit Ihrer Klasse GreyScale zu testen. Speichern Sie die Ergebnisse
jeweils in den Dateien 'result1.pgm', 'result2.pgm', ... ab!
Die ersten beiden Aufgaben dienen lediglich zum Test des Einlese-Operators '>>'.
'mapra.pgm' enthält keinerlei Kommentarzeilen, 'puppenbrunnen.pgm' dagegen
schon.
1. 'mapra.pgm' laden und in 'result1.pgm' abspeichern
2. 'puppenbrunnen.pgm' laden und in 'result2.pgm' abspeichern
Die Datei 'dom.pgm' enthält ein leicht verrauschtes Bild des Domes. Durch
Medianfilter bzw. Verwischen (Blur) kann dieses Rauschen vermindert werden,
allerdings auf Kosten der Details bei Medianfilterung bzw. der Schärfe bei
Blur. Mit beiden Methoden werden so stark unterschiedliche Ergebnisse erzielt.
3. 'dom.pgm' laden, 5x Median anwenden
4. 'dom.pgm' laden, 2x Blur anwenden
Folgende Aufgaben verdeutlichen die Wirkungsweise der verschiedenen Kanten-
erkennungsfilter. Offensichtlich erzeugt der Sobelfilter dickere Kanten als
der Laplacefilter.
5. 'shuttle.pgm' laden, Kirsch, Contrast anwenden
6. 'shuttle.pgm' laden, Laplace anwenden
7. 'shuttle.pgm' laden, Sobel anwenden
Die Bildverarbeitung findet u.a. Anwendung bei der vollautomatisierten
Qualitätskontrolle oder bei Robotern, die mit Hilfe einer Kamera ein
bestimmtes Objekt lokalisieren sollen, um es z.B. zu greifen: Für die
Mustererkennung ist es ratsam, ein Bild so zu vereinfachen, daß nur noch
wichtige Elemente wie die Konturen erhalten bleiben.
8. 'bauteil.pgm' laden, Contrast, Binarize anwenden
9. 'bauteil.pgm' laden, Sobel, Invert anwenden
Die Schärfe eines Bildes kann verbessert werden, indem die Kanten zusätzlich
verstärkt werden.
10. 'roentgen.pgm' laden, 3x Sobel+ (beachte das '+'!), 1x Contrast anwenden
11. 'result4.pgm' laden (der unscharfe Dom, das Ergebnis von Aufgabe 4),
5x Laplace+ anwenden
Überprüfen Sie das Schreiben und Lesen in den verschiedenen Formaten.
12. 'roentgen.pgm' laden, Format 1 wählen, abspeichern und wieder einlesen.
13. 'roentgen.pgm' laden, Format 2 wählen, abspeichern und wieder einlesen.
14. 'roentgen.pgm' laden, Format 3 wählen, abspeichern und wieder einlesen.
15. 'shuttle.pgm' laden, Format 1 wählen, abspeichern und wieder einlesen.
16. 'shuttle.pgm' laden, Format 2 wählen, abspeichern und wieder einlesen.
17. 'shuttle.pgm' laden, Format 3 wählen, abspeichern und wieder einlesen.
Neben diesen Aufgaben, die als Anregung dienen sollen, sollten Sie ruhig selbst
einmal mit den verschiedenen Bildern und Operationen herumexperimentieren!
Viel Spaß dabei!!!
UEBERPRUEFUNG DER ERGEBNISSE:
-----------------------------
Benutzen Sie das Programm 'bildtest', um Ihre Ergebnisse, die Sie als
PGM-Dateien gespeichert haben, auf Korrektheit hin prüfen zu lassen.
Um z.B. die Ergebnisse der Aufgabe 7 in 'result7.pgm' zu überprüfen, rufen
Sie 'bildtest -a7 result7.pgm' auf: '-a7' bedeutet, daß Aufgabe 7 gerechnet
werden soll, die Ergebnisse der Musterlösung werden anschließend mit der
Datei 'result7.pgm' (also Ihrem Ergebnis) verglichen.
'bildtest' ohne Parameter startet das Programm im interaktiven Modus, so daß
Sie sich auch schon vor der kompletten Implementierung Ihrer Klasse GreyScale
einmal einen Eindruck davon machen können, wie Ihr Programm später laufen
sollte...
Durch Aufruf von 'bildtest -h' erhalten Sie einen Hilfetext mit weiteren
Informationen.
Und nun
VIEL ERFOLG !!!
A4 0 → 100755
File added
Makefile 0 → 100644
CXX = g++
CXXFLAGS = -std=c++17 -Wall -Wextra -Wpedantic -O2 -g
.PHONY: clean
A4: greyscale.o mapraview.o unit.o
$(CXX) $(CXXFLAGS) -o $@ $^
mapraview.o: mapraview.cpp greyscale.h unit.h
$(CXX) $(CXXFLAGS) -c $<
greyscale.o: greyscale.cpp unit.h greyscale.h
$(CXX) $(CXXFLAGS) -c $<
clean:
rm -f A4 mapraview.o greyscale.o
RN11.pgm 0 → 100644
Source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
bildtest 0 → 100755
File added
#ifndef GREYSCALE_H_INCLUDED
#define GREYSCALE_H_INCLUDED
#include <iostream>
class GreyScale
{
private:
int breite , hoehe;
float* mat;
static void greyError(const char str[]);
public:
~GreyScale(){delete[] mat;};
GreyScale(int breite = 0,int hoehe = 0);
GreyScale(const GreyScale&);
float& operator()(int,int);
float operator()(int,int) const;
GreyScale& resize(int,int);
GreyScale& operator=(const GreyScale&);
GreyScale& operator+=(const GreyScale&);
GreyScale& operator-=(const GreyScale&);
int getWidth() const {
return breite;
}
int getHeight() const {
return hoehe;
}
GreyScale binarize(float) const;
GreyScale blur() const;
GreyScale clamp() const;
GreyScale contrast() const;
GreyScale kirsch() const;
GreyScale linTrans(float a,float b) const;
GreyScale laplace() const;
GreyScale invert() const;
GreyScale median() const;
GreyScale sobel() const;
GreyScale convolve(const float mask[], int size=3) const;
void check(std::istream &s);
friend std::istream& operator>>(std::istream&, GreyScale&);
friend std::ostream& operator<<(std::ostream&, const GreyScale&);
};
#endif // GREYSCALE_H_INCLUDED
File added
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment