From b2335caebbe37cae1ffff2069edb84dfb8eacc12 Mon Sep 17 00:00:00 2001 From: poppni99154 Date: Tue, 25 Nov 2025 20:49:26 +0100 Subject: [PATCH] Also jetzt gehen alle Test bei den Matrizen durch, der ImageInput nicht --- imageInput.c | 30 ++++++++++++++++++++++++------ matrix.c | 4 ++-- unity.h.url | 2 ++ 3 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 unity.h.url diff --git a/imageInput.c b/imageInput.c index a493f5f..e16bef6 100644 --- a/imageInput.c +++ b/imageInput.c @@ -8,15 +8,17 @@ // TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei +//Hilfsfunktion Header prüfen static int checkHeader(FILE *file) { char buffer[100]; if (fgets(buffer, sizeof(buffer), file) == NULL) return 0; buffer[strcspn(buffer, "\r\n")] = 0; - return strcmp(buffer, "__info2_image_file_format__") == 0; + return strcmp(buffer,FILE_HEADER_STRING ) == 0; } +//Hilfsfkt. 2 Bytes als unsigned short lesen (littel Endian) static unsigned short readUShort(FILE *file) { unsigned char bytes[2]; fread(bytes, 1, 2, file); @@ -39,6 +41,11 @@ GrayScaleImageSeries *readImages(const char *path) unsigned short width = readUShort(file); unsigned short height = readUShort(file); + if (count == 0 || width == 0 || height == 0) { + fclose(file); + return NULL; +} + GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries)); if (!series) { fclose(file); return NULL; } @@ -52,8 +59,7 @@ GrayScaleImageSeries *readImages(const char *path) free(series); return NULL; } - - for (unsigned int i = 0; i < count; i++) { +for (unsigned int i = 0; i < count; i++) { GrayScaleImage *img = &series->images[i]; img->width = width; img->height = height; @@ -64,15 +70,27 @@ GrayScaleImageSeries *readImages(const char *path) return NULL; } - fread(img->buffer, sizeof(GrayScalePixelType), width * height, file); - fread(&series->labels[i], sizeof(unsigned char), 1, file); + if (fread(img->buffer, sizeof(GrayScalePixelType), width * height, file) != width * height) { + fclose(file); + clearSeries(series); + return NULL; + } + + if (fread(&series->labels[i], sizeof(unsigned char), 1, file) != 1) { + fclose(file); + clearSeries(series); + return NULL; + } } fclose(file); -return series; + return series; } + + + // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt void clearSeries(GrayScaleImageSeries *series) { diff --git a/matrix.c b/matrix.c index 3c39d7d..639bde5 100644 --- a/matrix.c +++ b/matrix.c @@ -99,7 +99,7 @@ Matrix add(const Matrix matrix1, const Matrix matrix2) return result; - //hier weiter junge + for(unsigned int i = 0; i < rows; i++) { unsigned int r1 = (matrix1.rows == 1) ? 0 : i; //wenn zeilen 1 sind, wird immer erstes Element der Zeile verwenndet! @@ -111,7 +111,7 @@ Matrix add(const Matrix matrix1, const Matrix matrix2) unsigned int c2 = (matrix2.cols == 1) ? 0 : j; MatrixType v1 = matrix1.buffer[r1 * matrix1.cols + c1]; //Werte werden aus den Matrizen geholt - MatrixType v2 = matrix2.buffer[r2 * matrix1.cols + c2]; //MatrixType ist als float definiert in .h, kann so schnell geändert werden + MatrixType v2 = matrix2.buffer[r2 * matrix2.cols + c2]; //MatrixType ist als float definiert in .h, kann so schnell geändert werden result.buffer[i*cols+j] = v1 + v2; //in die Matrix result speichern } } diff --git a/unity.h.url b/unity.h.url new file mode 100644 index 0000000..0dec249 --- /dev/null +++ b/unity.h.url @@ -0,0 +1,2 @@ +[InternetShortcut] +URL=https://git.efi.th-nuernberg.de/gitea/freudenreichan/info2Praktikum-NeuronalesNetz/src/branch/main/unity/unity.h