언어 31

C 언어 영상처리 과제 3 - HE를 통해 선명한 사진 얻기

이 사진을 사용할 예정이었습니다.... 흑백으로 변환된 사진 이 사진 히스토그램 확실히 어두운 사진이라 잘 나올줄 알았건만... 음 좀 더 무서워졌네요....... 잘 된건데... 힝.... 꿀팁하나라면 ... https://cloudconvert.com/jpg-to-bmp JPG to BMP | CloudConvert JPG Converter JPG JPG, also known as JPEG, is a file format that can contain image with 10:1 to 20:1 lossy image compression technique. With the compression technique it can reduce the image size without losing the ima..

언어/C 2024.04.09

C언어 영상처리 - Histogram Equalization

이번에 주어진 이미지 입니다. 과하게 어두워보이죠 히스토그램을 확인해보니 절반이 잘려있습니다. 이제 이 이미지를 잘 복원하여 주관적 화질 평가를 높여봅시다. 히스토그램을 확인해보면 절반만에 다 사용했습니다. 이 픽셀 사용을 아래와 같게 만들어 줄 것입니다. // get Histogram for (int j = 0; j 255 ? 255 : (y[j * width + i] < 0 ? 0 : y[j * width + i]))]++; } } for (int i = 0; i < 255; i++) { histogram[i + 1] += hist..

언어/C 2024.04.04

C언어 영상처리 - Histogram

히스토그램을 통해 우린 픽셀 민감도의 분포를 표현할 수 있다. 분포를 보고 우린 segmentation할 수 있다. thresholding을 통해 일정 부분 이상의 위치를 볼 수 있고, 그 부분만 필터를 취할 수 있다. AI가 나오면서 한번에 가능해졌지만 일단 수업이므로... 코드는 전부 함수화를 하였다. void histo(int height, int width, double* y, int size,int stride, BITMAPFILEHEADER bmpFile, BITMAPINFOHEADER bmpInfo) { double* histogram; histogram = (double*)calloc(256, sizeof(double)); // get Histogram for (int j = 0; j < ..

언어/C 2024.04.02

C언어 영상처리 - padding, filters

CNN에서 사용했던 패딩과 똑같은 개념입니다. 2023.12.13 - [인공지능/공부] - CNN - 기본 개념 CNN - 기본 개념 우리는 여태까지 FCN으로 tensorflow에서 Dense만 사용해왔다. 그러나 사진과 같은 경우엔 해상도가 만만치 않아 대충 1000*1000이라고 하면 일렬로 나열하면 1000000이 된다. 이게 Dense layer 하나만 거쳐서 yoonschallenge.tistory.com 중앙값으로 필터를 취하는 것이다. 여기선 평균값을 취하는 필터이다. 여기서 한번 진행할 때 마다 원래 행렬 크기가 k*k -> (k-2) * (k-2)가 되므로 padding을 붙여준다. //padding int padding = 1; int pwidth = width + padding * ..

언어/C 2024.03.28

영상처리 과제 2 - PSNR 구하기

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include int main() { // 이거 하나 제출하면 된다. BITMAPFILEHEADER bmpFile, bmpFile2; BITMAPINFOHEADER bmpInfo, bmpInfo2; FILE* inputFile = NULL, * inputFile2 = NULL; inputFile = fopen("originalY.bmp", "rb"); // 파일명 확실하게 inputFile2 = fopen("testY.bmp", "rb"); // 경로도 확실하게 fread(&bmpFile, sizeof(BITMAPFILEHEADER), 1, inputFile); fread(&bmpInfo, size..

언어/C 2024.03.28

c언어 복습 - 입력, python도 조금

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include int main(){ char a[100]; char b[100]; int c; // gets() 예제: 보안상 사용을 권장하지 않음. // gets(a); // 띄어쓰기 포함 한 줄 전체를 입력 받음 // fgets() 사용 예제: 안전하게 한 줄 입력 받기 printf("fgets()로 입력: "); fgets(a, sizeof(a), stdin); // stdin에서 최대 sizeof(a)-1 글자를 읽어 a에 저장 // scanf() 사용 예제: 공백 전까지 문자열 입력 받기 printf("scanf()로 문자열 입력: "); scanf("%s", b); // 공백, 탭, 개행..

언어/C 2024.03.22

오랜만에 C언어 복습

영상처리를 위해 C언어를 사용해야 하는데 복습 한번 쓱 합시다. 1 byte = 8 bit 2^8 = 256 이라고 생각하면 편합니당 256*256 = 65536 malloc과 calloc이 있죠 free를 생활화 합시다! 우린 영상처리를 할꺼니까 이진 파이링 되겠네요 file 포인터 사용하는거 잘 봐야합니당 scanf에는 주소 기호 사용하는 것도 잊지 말고여 상대 경로와 절대 경로 잘 지켜야 합니다. 파일에서 데이터를 가지고 온다고 생각하면 편합니다. 파일에 작성한다고 생각하면 됩니당 그럼 실습 하나를 해봐야겠죠 #define _CRT_SECURE_NO_WARNINGS #include #include #include int main() { BITMAPFILEHEADER bmpFile; BITMAPINF..

언어/C 2024.03.12

함수를 가리키는 포인터, 보이드 포인터(void *)

int add(int, int); int main() { int a, b, c, d[20][20]; unsigned int r; void* p; int (*padd)(int,int); padd = &add; scanf("%d", &a); scanf("%d %d", &b, &c); p = &a; printf("%d\n", *((int*) p)); printf("%d", padd(b, c)); } int add(int a, int b) { return a + b; } 우리는 void* 로 p를 만들어 주었다. 그리하여 a의 주소를 p에 집어 넣고 p를 호출할 때 (int *)으로 형을 변경하여 출력해줬다. 함수를 가리키는 포인터는 위와 같이 포인터 하나와 그것이 가지는 변수의 형들을 입력해주면 된다. 그리고..

언어/C 2023.11.17

포인터를 가리키는 포인터

void pswap(int**, int**); int main() { int a, b, c, d; unsigned int r; scanf("%d %d ", &a, &b); int* px = &a, *py= &b; pswap(&px,&py); printf("%d %d", *px,*py); } void pswap(int** x, int** y) { int *tmp = NULL; tmp = *x; *x = *y; *y = tmp; } 음 따로 설명할 만한 것은 없지만 함수에 넘겨주는 &px는 px의 주소를 보내는 것이고 함수 내에선 px의 포인터를 서로 바꿔주는 것이라 바뀐 값이 나온다. ex 1 5 -> 5 1

언어/C 2023.11.17
728x90
728x90