[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;
}
반응형