Also jetzt gehen alle Test bei den Matrizen durch, der ImageInput nicht

This commit is contained in:
Niklas Popp 2025-11-25 20:49:26 +01:00
parent e58c3e2117
commit b2335caebb
3 changed files with 28 additions and 8 deletions

View File

@ -8,15 +8,17 @@
// TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei // TODO Implementieren Sie geeignete Hilfsfunktionen für das Lesen der Bildserie aus einer Datei
//Hilfsfunktion Header prüfen
static int checkHeader(FILE *file) { static int checkHeader(FILE *file) {
char buffer[100]; char buffer[100];
if (fgets(buffer, sizeof(buffer), file) == NULL) if (fgets(buffer, sizeof(buffer), file) == NULL)
return 0; return 0;
buffer[strcspn(buffer, "\r\n")] = 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) { static unsigned short readUShort(FILE *file) {
unsigned char bytes[2]; unsigned char bytes[2];
fread(bytes, 1, 2, file); fread(bytes, 1, 2, file);
@ -39,6 +41,11 @@ GrayScaleImageSeries *readImages(const char *path)
unsigned short width = readUShort(file); unsigned short width = readUShort(file);
unsigned short height = readUShort(file); unsigned short height = readUShort(file);
if (count == 0 || width == 0 || height == 0) {
fclose(file);
return NULL;
}
GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries)); GrayScaleImageSeries *series = malloc(sizeof(GrayScaleImageSeries));
if (!series) { fclose(file); return NULL; } if (!series) { fclose(file); return NULL; }
@ -52,8 +59,7 @@ GrayScaleImageSeries *readImages(const char *path)
free(series); free(series);
return NULL; return NULL;
} }
for (unsigned int i = 0; i < count; i++) {
for (unsigned int i = 0; i < count; i++) {
GrayScaleImage *img = &series->images[i]; GrayScaleImage *img = &series->images[i];
img->width = width; img->width = width;
img->height = height; img->height = height;
@ -64,15 +70,27 @@ GrayScaleImageSeries *readImages(const char *path)
return NULL; return NULL;
} }
fread(img->buffer, sizeof(GrayScalePixelType), width * height, file); if (fread(img->buffer, sizeof(GrayScalePixelType), width * height, file) != width * height) {
fread(&series->labels[i], sizeof(unsigned char), 1, file); 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); fclose(file);
return series; return series;
} }
// TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt // TODO Vervollständigen Sie die Funktion clearSeries, welche eine Bildserie vollständig aus dem Speicher freigibt
void clearSeries(GrayScaleImageSeries *series) void clearSeries(GrayScaleImageSeries *series)
{ {

View File

@ -99,7 +99,7 @@ Matrix add(const Matrix matrix1, const Matrix matrix2)
return result; return result;
//hier weiter junge
for(unsigned int i = 0; i < rows; i++) 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! 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; unsigned int c2 = (matrix2.cols == 1) ? 0 : j;
MatrixType v1 = matrix1.buffer[r1 * matrix1.cols + c1]; //Werte werden aus den Matrizen geholt 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 result.buffer[i*cols+j] = v1 + v2; //in die Matrix result speichern
} }
} }

2
unity.h.url Normal file
View File

@ -0,0 +1,2 @@
[InternetShortcut]
URL=https://git.efi.th-nuernberg.de/gitea/freudenreichan/info2Praktikum-NeuronalesNetz/src/branch/main/unity/unity.h