본문 바로가기

c++

(48)
C++ 한글로 어디까지 가능하니? 이전 글에 이어, class 도 한글로 가능할까,라는 의문으로 define으로 대충 갈아 치운 코드를 만들어 봤습니다. 컴파일? 실행? 잘 됩니다. 이런 거 보면 옛날 시절 한글언어로 프로그래밍한다는 계획이 사라진 것이 의미가 아쉽게 되었습니다만, 어찌 되었든 GCC6부터는 UTF-8/16으로 인코딩 된 인식가능한 모든 문자열에 대해 컴파일이 대응된다는 것을 2023년에 늦게 안 것 같지만 꽤 재미있는 접근이 아니었는지, 란 생각이 듭니다. 아니면 한국사람만 이해할 수 있는 언어모델을 C++로 오픈소스로 올리면서 M$ 의 CoPiliot에게 코드를 뺏기기 싫다는 느낌 같은 느낌이 든다면 아마 이런 아이디어를 이용해서 프로그래밍해 올리는 것도 재미있는 일이 아닐까 합니다. 물론 욕도 좀...
MacOS Apple Silicon 에서 universal binary 만들기 읽기에 앞서, 이 방법은 X-Code IDE 를 쓰시는 분들을 위한 글이 아니라 iTerm2 또는 기본 Terminal app 과 X-Code command line tool 의 llvm-g++ 을 이용해서 빌드를 하는 환경을 기준으로 설명을 하는 글 입니다. 혹시라도 IDE 를 쓰시는 분들은 설정 관련으로 Apple 의 Universal binary 문서를 참조 해 보시기 바랍니다. Apple universal binary Mac OS 는 Universal binary 라는 형태를 지원 하고 있습니다. 이 형태가 중요해 진 시점은 바로 Apple Silicon platform 이 상용화 되면서 M1 프로세서를 기반으로 한 Mac OS 11 big sur 가 대중앞에 나오기 시작하면서 부터 입니다. 정확..
FLFTRender, freetype2 를 이용한 Fl_RGB_Image 에 글자 렌더링 Freetype2 에 대한 소개 Freetype2 는 TTF 폰트를 사용할 수 없는 시스템에서 이를 사용하기 위한 좋은 선택일 수 있거나, 플랫폼에 상관 없이 TTF 가 가지는 정확한 렌더링을 얻어 내기 위한 용도 등 많은 활용도가 있는 오픈소스 라이브러리 입니다. 보통은 Linux 에서 이를 가장 많이 사용하고 있을 것이고, 일부 게임들에서도 TTF 를 통해 Texture 를 얻거나 할때 많이들 사용하는 것으로 알고 있습니다. libfreetype2 + FLTK 활용 libfreetype2 의 경우 대부분 Linux 에서는 기본적으로 설치 되거나, 어렵지 않게 패키지 매니저로 설치가 가능한 라이브러리 입니다만, Windows 에서는 M$ 가 만들어 놓은 비친화적인 OS와 개발환경의 차이 덕에 이런 걸 ..
신경망 슈퍼 리졸루션 실험, 유명인들. 최근에 개선한 신경망 슈퍼 리졸루션 라이브러리로 구글이미지에서 검색한 일부 유명인 이미지를 가로 64 또는 세로 64px 로 줄인 이미지를 통해 6배 늘린 이미지로 각기 만들어 보았습니다. 구글 이미지 검색어 : famous people, 인생이 코미디 연기자이신 그 분 법규를 날리시는 어느 미합중국 대통령 인류 과학에 한 획을 그어 주신 위대한 분 빌 형 나의 어릴적 팝의 황제 구글이 배트맨 연기자라고 자꾸 검색 하는 그 분 '이퀄빌리움' 이란 엄청난 영화를 통해 처음 알게 된 크리스쳔 베일의 이미지 인데 64x64로 검색 하면 구글도 제대로 검색이 아래처럼 안됩니다. 대퉁 이미지 검색이 되긴 하는데 정확한 이미지로 검색이 대퉁은 되는데, 실상 이미지 검색 부분에서는 비슷한 이미지로 해당 배우의 이미지..
개선된 신경망 슈퍼 리졸루션 엔진, libsrcnn 변경점 소개 처음 '슈아 왕'에 의해 만들어진 OpenCV 를 이용한 super resolution 을 OpenMP 로 몇배 빠르게 만들었던 작업 뒤에 순수 C++ 로만 구동 되도록 만든 라이브러리 엔진을 작년에 만든 적이 있습니다. (관련글) 기존에 만들었던 엔진에 몇가지 문제가 있었는 점을 확인 한 바가, 내부에 사용된 미리 계산된 학습 데이터가 2배 이내의 이미지에 최적화가 되어 있다는 점 입니다. 그래서 2배를 초과하는 이미지에서는 해당 이미지의 해상도가 SRCNN 알고리즘에 정확히 동작하지 못하는 부분이 많이 발견 되었었 습니다만, 이를 개선하기 위해 2배 단위로 영상 단계별로 scaling 하도록 개선한 소스를 업데이트 하였습니다. 물론 이로 인해 속도가 매우 떨어지게 되는 점은 아쉬운 부분 입니다만, 원..
보케 효과를 만들어 보기 #2 - 성능향상 이 글은 이전 "보케 효과를 만들어 보기 #1" 에 이어지는 글 입니다. 혹시 이 글을 이전 글 보다 먼저 보신 분은 먼저 앞선 글을 읽고 오시면 더 이해 하시기 편할 것으로 예상 됩니다. 향상된 보케(빛망울) 효과 이전 글 에 소개된 보케효과 알고리즘은 0.1 초판으로서 현재 마지막 0.1.7.31 버젼에 비해 많은 것들이 모자란 버젼 이었습니다만, 그간 짬짬히 여러 문제를 수정 하고 성능을 비약적으로 향상 하여 근대의 다중 코어 CPU ( x86 및 ARM 계열 모두 해당 됨 ) 들에서 가장 효과적인 구동을 하도록 발전 하였습니다. 그 중 몇가지 수정 사항은 먼저, 효과를 적용하면서 발생하던 메모리 누수 ( 제 실수 였습니다만 ) 를 제거 하고, OpenMP 의 효과적인 구동으로 각 CPU threa..
보케 효과를 만들어 보기 #1 심도가 낮은 렌즈와, 큰 크기의 촬상면을 가진 DSLR 같은 종류가 아니면 찍기 힘든 사진이 있다면 아마 배경이 뭉개진 이미지들이 아닐까 합니다만, 사실 단순이 Gaussian blur 만 줘서는 큰 렌즈의 빛의 굴절로 인해 생기는 일명 Bokeh 라는 형태를 만들어 내기가 쉽지는 않습니다. 그래서 어떻게 Bokeh 를 만들어 낼까? 란 고민을 하다 scratchpixel.com 에 한 페이지를 보게 되었습니다. circualr shifting 이라는 형태를 가지고 빛이 렌즈와 조리개를 통해 촬상면에 맺히는 형태를 흉내 낸 시뮬레이션 정도 이긴 합니다만 꽤 그럴싸한 결과물을 얻을 수 있었습니다. 원래 소스는 조금 복잡한 처리를 해야 하나, 제가 이를 조금 수정 하여 다음 github 위치에 소스를 공개하..
신경망 Super-Resolution Imaging 오픈 소스 (libsrcnn) 공개 이전에 Super-Resolution Imaging 관련으로 관심을 가졌다가, 오래전에 공개 되었던 한 홍콩의 대학쪽에서 공개된 논문과 소스코드를 이번에 손을 보게 되었습니다. 이전에 fl_imgtk 에 Lanczos3 까지 초 고속으로 구현을 해 보았던지라, 이번 Super-Resolution (이하 SR) 은 어렵지 않게 구현을 할 수 있을 거로 추측을 해 봤습니다만, 결론적으로 대단히 쉽지 않은 부분이 많았습니다. 특히 지속적으로 32 에서 64번씩 반복되는 커널 매트릭스 구조는 도저히 속도를 개선 하는데 쉽지 않은 부분이었습니다만, 그럼에도 만들어진 영상의 품질은 아마 현존하는 이미지 리사이즈 알고리즘 중에서는 최고봉이 아닐까 합니다. 아무래도 Lanczos3 와 같은 리사이즈 엔진은 인간의 눈으..