[IT]/C++

5*5행렬에 3*3필터 적용하기

givemebro 2020. 3. 12. 10:53
반응형
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void matMaker(int mat1[5][5], int mat2[3][3]) {
	int num = 1;
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			mat1[i][j] = i * 5 + j;
			if (i < 3 && j < 3) {
				mat2[i][j] = num % 2;
				num++;
			}
		}
	}
}
void matmul(int mat1[5][5], int mat2[5][5], int result[5][5]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			result[i][j] = mat1[i][j] * mat2[i][j];
		}
	}
}
void matprinter5(int result[5][5]) {
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			printf("  %4d", result[i][j]);
		}
		puts("");
	}
	puts("");
	puts("");

}void matprinter3(int result[3][3]) {
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) {
			printf("  %4d", result[i][j]);
		}
		puts("");
	}
	puts("");
	puts("");

}
void matFil(int mat1[5][5], int mat2[3][3],int result2[3][3]) {
	for (int i = 0; i < 3; i++) {
		for (int a = 0; a < 3; a++) {
			// 메트릭스 위에서 움직이는 용도

			//필터 적용 용도
			for (int j = 0; j < 3; j++) {
				for (int k = 0; k < 3; k++) {
					result2[i][a] += mat1[j+i][k+a] * mat2[j][k];
				}
			}
		}
	}
}
int main() {
	int mat1[5][5], mat2[3][3], result1[5][5], result2[3][3];
	memset(result2, 0, sizeof(result2));
	matMaker(mat1, mat2);
	matFil(mat1, mat2, result2);
	matprinter5(mat1);
	matprinter3(mat2);

	matprinter3(result2);

	return 0;
}

반응형