8 Commits
5 changed files with 103 additions and 13 deletions
+7 -1
View File
@@ -1,4 +1,10 @@
mnist mnist
runTests runTests
*.o *.o
*.exe *.exe
.vscode/settings.json
.vscode/launch.json
.vscode/settings.json
.vscode/settings.json
runImageInputTests
testFile.info2
+33
View File
@@ -7,16 +7,49 @@
#define FILE_HEADER_STRING "__info2_image_file_format__" #define FILE_HEADER_STRING "__info2_image_file_format__"
// 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
GrayScaleImage readImage()
{
}
// 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)
{ {
unsigned short * numImages;
unsigned short * breiteBilder;
unsigned short * laengeBilder;
GrayScaleImageSeries *series = NULL; GrayScaleImageSeries *series = NULL;
FILE *file = fopen(*path,"rb");
char * headOfFile;
fread(headOfFile, sizeof(FILE_HEADER_STRING),1, file); //liest den header ein und überprüft ob korrekte datei
if(strcmp(headOfFile, FILE_HEADER_STRING) != 0)
return NULL;
// liest numIMages, breite und länge der Bilder ein
fseek(file, sizeof(FILE_HEADER_STRING), SEEK_SET);
fread(numImages, sizeof(short), 1, file);
fseek(file, sizeof(short), SEEK_CUR);
fread(breiteBilder, sizeof(short), 1, file);
fseek(file, sizeof(short), SEEK_CUR);
fread(laengeBilder, sizeof(short), 1, file);
series = malloc(*numImages * *breiteBilder * *laengeBilder * sizeof(short));
for(int i = 0; i < numImages; i++)
{
}
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)
{ {
} }
+8 -7
View File
@@ -57,11 +57,12 @@ imageInputTests: imageInput.o imageInputTests.c $(unityfolder)/unity.c
# -------------------------- # --------------------------
# Clean # Clean
# -------------------------- # --------------------------
#clean:
#ifeq ($(OS),Windows_NT)
# del /f *.o *.exe
#else
# rm -f *.o mnist runMatrixTests runNeuralNetworkTests runImageInputTests
#endif
clean: clean:
rm -f *.o *.exe ifeq ($(OS),Windows_NT)
del /f *.o *.exe
else
rm -f *.o mnist runMatrixTests runNeuralNetworkTests runImageInputTests
endif
clean für windows
clean:
rm -f *.o *.exe
+26 -5
View File
@@ -20,9 +20,9 @@ void clearMatrix(Matrix *matrix) {
matrix->cols = UNDEFINED_MATRIX_VALUE; matrix->cols = UNDEFINED_MATRIX_VALUE;
free((*matrix).buffer); // Speicher freigeben free((*matrix).buffer); // Speicher freigeben
} }
void setMatrixAt(MatrixType value, Matrix matrix, void setMatrixAt(const MatrixType value, Matrix matrix,
unsigned int rowIdx, // Kopie der Matrix wird übergeben const unsigned int rowIdx, // Kopie der Matrix wird übergeben
unsigned int colIdx) { const unsigned int colIdx) {
matrix.buffer[rowIdx * matrix.cols + colIdx] = matrix.buffer[rowIdx * matrix.cols + colIdx] =
value; // rowIdx * matrix.cols -> Beginn der Zeile colIdx ->Spalte value; // rowIdx * matrix.cols -> Beginn der Zeile colIdx ->Spalte
@@ -41,7 +41,28 @@ MatrixType getMatrixAt(const Matrix matrix,
return value; return value;
} }
Matrix add(const Matrix matrix1, const Matrix matrix2) { Matrix add(const Matrix matrix1, const Matrix matrix2) {
// broadcasting Matrix result;
return matrix1; const int cols1 = matrix1.cols;
const int rows1 = matrix1.rows;
const int cols2 = matrix2.cols;
const int rows2 = matrix2.rows;
const int colsEqu = (matrix1.cols == matrix2.cols) ? 1 : 0;
const int rowsEqu = (matrix1.rows == matrix2.rows) ? 1 : 0;
if(colsEqu && rowsEqu)
{
Matrix result = createMatrix(matrix1.rows, matrix1.cols);
for(int i = 0; i < rows1; i++)
{
for (int j = 0; j < cols1; j++)
{
int valueM1 = getMatrixAt(matrix1, i, j);
int valueM2 =getMatrixAt(matrix2, i, j);
int sum = valueM1 + valueM2;
setMatrixAt(sum, result,i,j);
}
}
return result;
}
} }
Matrix multiply(const Matrix matrix1, const Matrix matrix2) { return matrix1; } Matrix multiply(const Matrix matrix1, const Matrix matrix2) { return matrix1; }
+29
View File
@@ -0,0 +1,29 @@
Inhalte: Dynamische Speicherverwaltung, Strukturen, Dateien lesen.
Ziel: Die Bilder aus mnist_test.info 2 auslesen
Struktur für einlesen des Strings am Anfang der Datei:
int AnzahlBilder
int breiteBilder
int LaengeBilder
Struktur für Bilder:
unsinged int array Breite * Höhe
unsigned int Klasse (Label 0 - 9)
Speicher für Bilder dynamisch allokieren
GrayScaleImageSeries:
datei einlesen
header String aus der Datei lesen
mit header String den benötigten Speicher freigeben
in den Speicher die Datei einschreiben (mit Hilfsfunktion)
Hilfsfunktion (saveFile)
gehe zum Anfang des Strings
speicher alles der Reihe nach ein
clearSeries:
pointer der be malloc kommt nehemen
free()