imageInput.c:
Verbesserungen an getInformationOfImages vorgenommen getGrayScalePixelOfImage und getLabelOfImage Tests laufen auf Fehler, müssen noch behoben werden
This commit is contained in:
parent
fc62a7cc09
commit
52e25f6fec
@ -26,17 +26,25 @@ static FILE* openImageFile(const char* path) {
|
|||||||
// Speicherplatz freigeben
|
// Speicherplatz freigeben
|
||||||
free(fileHeaderString);
|
free(fileHeaderString);
|
||||||
|
|
||||||
|
if (imageFile == NULL) {
|
||||||
|
printf("Unbekannter Fehler, imageFile ist Null");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return imageFile;
|
return imageFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int getInformationOfImages(FILE* imageFile, int dimensionsOfImages[], GrayScaleImageSeries *series) {
|
static int getInformationOfImages(FILE* imageFile, int dimensionsOfImages[], GrayScaleImageSeries *series) {
|
||||||
// Speicher für die drei Zahlen + Nullterminator (je Zahl 2 Byte)
|
// Speicher für die drei Zahlen (je Zahl 2 Byte)
|
||||||
char bytestream[7];
|
unsigned char bytestream[6];
|
||||||
bytestream[6] = '\0';
|
|
||||||
|
|
||||||
// Daten einlesen
|
// Daten einlesen
|
||||||
int itemsRead = fread(bytestream, 2, 3, imageFile);
|
int itemsRead = fread(bytestream, 2, 3, imageFile);
|
||||||
|
|
||||||
|
//for (size_t i = 0; i < (itemsRead * 2); i++) {
|
||||||
|
// printf("%02X ", bytestream[i]);
|
||||||
|
//}
|
||||||
|
|
||||||
if (itemsRead != 3) {
|
if (itemsRead != 3) {
|
||||||
// Nicht genügend Daten gelesen
|
// Nicht genügend Daten gelesen
|
||||||
return -1;
|
return -1;
|
||||||
@ -54,6 +62,40 @@ static int getInformationOfImages(FILE* imageFile, int dimensionsOfImages[], Gra
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int getGrayScalePixelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
||||||
|
// SPeicher für Buffer allokieren
|
||||||
|
image->buffer = malloc(image->width * image->height * sizeof(GrayScalePixelType));
|
||||||
|
|
||||||
|
// Pixelwerte aus Datei auslesen
|
||||||
|
int itemsRead = fread(image->buffer, 1, image->width * image->height * sizeof(GrayScalePixelType), imageFile);
|
||||||
|
|
||||||
|
if (itemsRead != image->width * image->height) {
|
||||||
|
free(image->buffer);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char getLabelOfImage(FILE* imageFile, GrayScaleImage* image) {
|
||||||
|
// Array um Label zu speichern
|
||||||
|
unsigned char *bytestream = malloc(1);
|
||||||
|
|
||||||
|
// Label aus Datei auslesen
|
||||||
|
int itemsRead = fread(bytestream, 1, 1, imageFile);
|
||||||
|
|
||||||
|
if (itemsRead != 1) {
|
||||||
|
free(bytestream);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned char label = bytestream[0];
|
||||||
|
|
||||||
|
free(bytestream);
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
|
|
||||||
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
|
// TODO Vervollständigen Sie die Funktion readImages unter Benutzung Ihrer Hilfsfunktionen
|
||||||
GrayScaleImageSeries *readImages(const char *path)
|
GrayScaleImageSeries *readImages(const char *path)
|
||||||
{
|
{
|
||||||
@ -62,7 +104,7 @@ GrayScaleImageSeries *readImages(const char *path)
|
|||||||
FILE* imageFile = openImageFile(path);
|
FILE* imageFile = openImageFile(path);
|
||||||
|
|
||||||
if (imageFile == NULL) {
|
if (imageFile == NULL) {
|
||||||
printf("Unbekannter Fehler");
|
printf("Unbekannter Fehler, imageFile ist Null");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,20 +117,48 @@ GrayScaleImageSeries *readImages(const char *path)
|
|||||||
// 2) Breite der Bilder --> width
|
// 2) Breite der Bilder --> width
|
||||||
// 3) Höhe der Bilder --> height
|
// 3) Höhe der Bilder --> height
|
||||||
int dimensionsOfImages[2];
|
int dimensionsOfImages[2];
|
||||||
getInformationOfImages(imageFile, dimensionsOfImages, series);
|
int erfolg = getInformationOfImages(imageFile, dimensionsOfImages, series);
|
||||||
|
|
||||||
|
if (erfolg == -1) {
|
||||||
|
printf("Unbekannter Fehler bei getInformationOfImages.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Speicher für die Labels vorbereiten, wird später Bild für Bild befüllt
|
||||||
|
series->labels = malloc(series->count * sizeof(unsigned char));
|
||||||
// labels = unsigned char-Array mit der Größe wie AnzahlBilder
|
// labels = unsigned char-Array mit der Größe wie AnzahlBilder
|
||||||
|
|
||||||
// Springe in der Datei an die Stelle nach den drei Zahlen
|
if (series->labels == NULL) {
|
||||||
|
printf("Fehler bei malloc");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < series->count; i++) {
|
||||||
|
// image initialisieren
|
||||||
|
GrayScaleImage *image = NULL;
|
||||||
|
image = (GrayScaleImage *)malloc(sizeof(GrayScaleImage));
|
||||||
|
|
||||||
|
image->width = dimensionsOfImages[0];
|
||||||
|
image->height = dimensionsOfImages[1];
|
||||||
|
|
||||||
|
if(getGrayScalePixelOfImage(imageFile, image) != 0) {
|
||||||
|
printf("Fehler bei getGrayScalePixelOfImage");
|
||||||
|
}
|
||||||
|
|
||||||
|
series->labels[i] = getLabelOfImage(imageFile, image);
|
||||||
|
|
||||||
|
if (series->labels[i] == -1) {
|
||||||
|
printf("Fehler bei getLabelOfImage");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// für jedes Bild gemäß GreyScaleImageSeries.count:
|
// für jedes Bild gemäß GreyScaleImageSeries.count:
|
||||||
// GreyScaleImage.width = width
|
// GreyScaleImage.width = width
|
||||||
// GreyScaleImage.height = height
|
// GreyScaleImage.height = height
|
||||||
// GreyScaleImageSeries.buffer = Pixelwerte
|
// GreyScaleImageSeries.buffer = Pixelwerte
|
||||||
// labels = Label des Bilds
|
// labels = Label des Bilds
|
||||||
|
// series.labels[i] = (unsigned char)(i % 256);
|
||||||
// Springe in der Datei an die Stelle nach dem i. Bild
|
// Springe in der Datei an die Stelle nach dem i. Bild
|
||||||
|
|
||||||
// GrayScaleImageSeries.labels = labels (mit strcpy)
|
|
||||||
|
|
||||||
return series;
|
return series;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user