"c++" 검색결과 (43)
  • 보케 효과를 만들어 보기 #2 - 성능향상

    이 글은 이전 "보케 효과를 만들어 보기 #1" 에 이어지는 글 입니다. 혹시 이 글을 이전 글 보다 먼저 보신 분은 먼저 앞선 글을 읽고 오시면 더 이해 하시기 편할 것으로 예상 됩니다. 향상된 보케(빛망울) 효과 이전 글 에 소개된 보케효과 알고리즘은 0.1 초판으로서 현재 마지막 0.1.7.31 버젼에 비해 많은 것들이 모자란 버젼 이었습니다만, 그간 짬짬히 여러 문제를 수정 하고 성능을 비약적으로 향상 하여 근대의 다중 코어 CPU ( x86 및 ARM 계열 모두 해당 됨 ) 들에서 가장 효과적인 구동을 하도록 발전 하였습니다. 그 중 몇가지 수정 사항은 먼저, 효과를 적용하면서 발생하던 메모리 누수 ( 제 실수 였습니다만 ) 를 제거 하고, OpenMP 의 효과적인 구동으로 각 CPU threa..

    내가 작업한 것들/소프트웨어
    2018.09.29 00:05
  • 보케 효과를 만들어 보기 #1

    심도가 낮은 렌즈와, 큰 크기의 촬상면을 가진 DSLR 같은 종류가 아니면 찍기 힘든 사진이 있다면 아마 배경이 뭉개진 이미지들이 아닐까 합니다만, 사실 단순이 Gaussian blur 만 줘서는 큰 렌즈의 빛의 굴절로 인해 생기는 일명 Bokeh 라는 형태를 만들어 내기가 쉽지는 않습니다. 그래서 어떻게 Bokeh 를 만들어 낼까? 란 고민을 하다 scratchpixel.com 에 한 페이지를 보게 되었습니다. circualr shifting 이라는 형태를 가지고 빛이 렌즈와 조리개를 통해 촬상면에 맺히는 형태를 흉내 낸 시뮬레이션 정도 이긴 합니다만 꽤 그럴싸한 결과물을 얻을 수 있었습니다. 원래 소스는 조금 복잡한 처리를 해야 하나, 제가 이를 조금 수정 하여 다음 github 위치에 소스를 공개하..

    내가 작업한 것들/소프트웨어
    2018.09.15 19:49
  • 신경망 Super-Resolution Imaging 오픈 소스 (libsrcnn) 공개

    이전에 Super-Resolution Imaging 관련으로 관심을 가졌다가, 오래전에 공개 되었던 한 홍콩의 대학쪽에서 공개된 논문과 소스코드를 이번에 손을 보게 되었습니다. 이전에 fl_imgtk 에 Lanczos3 까지 초 고속으로 구현을 해 보았던지라, 이번 Super-Resolution (이하 SR) 은 어렵지 않게 구현을 할 수 있을 거로 추측을 해 봤습니다만, 결론적으로 대단히 쉽지 않은 부분이 많았습니다. 특히 지속적으로 32 에서 64번씩 반복되는 커널 매트릭스 구조는 도저히 속도를 개선 하는데 쉽지 않은 부분이었습니다만, 그럼에도 만들어진 영상의 품질은 아마 현존하는 이미지 리사이즈 알고리즘 중에서는 최고봉이 아닐까 합니다. 아무래도 Lanczos3 와 같은 리사이즈 엔진은 인간의 눈으..

    내가 작업한 것들/소프트웨어
    2018.08.08 22:49
  • 슈퍼 리졸루션/Super Resolution

    개발자K 씨는 오늘도 뛰어난 영상처리 알고리즘을 찾아 해매며, 'fl_imgtk 에 뭘 더 집어 넣어 볼까?' 에 대한 답을 찾던중, Robust And Fast Super Resolution 이란 알고리즘을 발견 합니다. 여기서 사용하는 알고리즘은 Peyman Milanfar 박사의 MDSP Resolution Enhancement 에 기반을 두고 있는데, 대충 논문 중 충격적인 결과 하나를 보면 ... 저해상도/LR(Low Resolution) 영상을 고품질의 원본에 가까운 복호를 해 줍니다. 즉, 왼쪽(LR) 이미지를 복구하면 가운데 이미지처럼 Blurred 된 영상이 얻어 지고, 여기에서 Deblur 를 하면 가장 오른쪽 영상이 나오게 됩니다. 저해상도 이미지가 가지는 특성을 그대로 살리면서 실제..

    어떻게 할까/소프트웨어
    2018.04.05 14:26
  • 시진을 그냥 이쁘고 밝게 : MIOH (Make Image O' HDR)

    이 프로그램은 제가 오픈소스 프로젝트 중 하나로 가져 가고 있는 공개 프로그램 입니다. 단, GPL3 라이센스를 가지고 있으므로 상용으로 소스를 일절 사용할수 없습니다. 물론 어디서든 어떤 개인이던지 빌드된 바이너리를 사용하는 것은 문제가 되지 않지만, 재배포를 할수는 없습니다. 이 프로그램은 일단 전문가가 아니더라도 아무 사진이나 화사한 사진을 만들수 있도록 하자는 취지로 만들어진 것이며, 다음 알고리즘을 기반으로 만들어 졌습니다.Drago's log mappingReinhard's HDRCLAHE 위 알고리즘은 대부분의 오픈소스 이미지 처리 부분에서 많이들 사용하고 있으나, 은근히 공개프로그램 등에서는 사용되지 않는 것들 입니다. 그래서 간단히 윈도우나 맥(현재 개발이 끝나감) 에서 고가의 프로그램 ..

    내가 작업한 것들/소프트웨어
    2017.11.04 23:06
  • Windows 에서 BIOS dump 및 Parse (해석) 하기 소스코드

    이 프로그램은 작년에 만들었던 것이나, 소스를 오픈 하고 있지 않다는걸 늦게 알아서 지금에서야 공개 하게 되었습니다. 공개된 위치는 다음과 같습니다. https://bitbucket.org/rageworx/rk_bios_dump 소스코드 자체는 MIT License 를 따르며, 내부에 사용된 코드들 중 WinBIOS info (winbiosinfo.h/cpp) 는 BIOS 규격을 공표하는 DMTF / DSP0132 ( 2011-01-26 ) version 2.7.1 의 System Management BIOS (SMBIOS) Reference Specification 문서를 참조로 개발 중 이었던 코드 입니다. 대부분의 표준 SMBIOS 를 parse 할 수 있으나, 일부 Phoenix 사 BIOS 들은..

    Developement/C/C++
    2017.10.17 11:36
  • [FLTK] fl_imgtk 0.3.26.x 에서 Aero glass 효과 내기.

    이 글을 읽기 앞서 이해가 먼저 필요한 사항 FLTK 란 무엇인가?FLTK 1.3.4-1-tsfl_imgtk FLTK 는 여러 platform 에서 사용하기 좋은 GUI library 이나, FLTK 에서 이미지를 처리 하기 위해서는 뭐 아무것도 없는게 사실 입니다. 그래서 따로 fl_imgtk 란 것을 만들고, 이것을 통해 CPU 로만 여러 이미지 처리를 할 수 있도록 Open Source 로 제공 하고 있습니다. Public open 이므로 누구나 가져다 빌드 해 쓸 수 있으면 마음대로 쓸 수 있는 MIT License 를 적용하여 배포 중이나, 그리 유명세가 없다 보니 혼자 쓰는 단점이 생기는 것 같아 조금씩 이를 홍보해야 겠다는 생각이 들어 글을 쓰기 시작 했습니다. 일단 fl_imgtk 의 경우..

    Developement/C/C++
    2017.10.13 14:22
  • Polygon Fill, Anti-Alias 적용 폴리곤 채우기

    이전의 폴리곤 채우기를 만든 후, fl_imgtk 를 업데이트 하다 보니, 부드러운 alias 처리를 한 polygon 을 만들어 볼 필요가 생겼습니다. 그래서 여러가지 생각을 해 본 후, 빠르게 도달한 방법은 보통 게임에서 많이 쓰고 있는 Full Screen (여기선 Full Image) Anti-Alias ! 그냥 그리려는 이미지를 4배 ( 실제 변 길이는 2배씩이나, 실제 메모리는 4배가 됩니다. 즉, 2x2 에서 4x4 가 되면 면적은 4배가 되는 원리 ) 크게 만들어 두고 여기다 그리려는 좌표를 두배씩 연산해서 그린 다음, 이걸 다시 fl_imgtk 의 fast rescale 엔진을 이용해서 Bicubic resize 를 적용하면 되는 것 이었습니다. OpenMP 를 사용하기 때문에 오래 걸리..

    Developement/C/C++
    2017.07.28 10:21
  • FLTK 용 이미지 처리 라이브러리, fl_imgtk 업데이트.

    FLTK 용 이미지 처리 라이브러리인 fl_imgtk 의 새로운 업데이트를 GitHub 에 갱신 하였습니다. 별거 아닐 수 있긴 하지만, 뭔가 WPF 따위 안쓰고, QT 보다 매우 가볍고, 그렇다고 GTK+ 같은걸 도 안써도 되는 여러 조건에서 저에게 가장 적합한 것은 FLTK 뿐 이더군요. 하지만 너무 가볍게 만든 GUI 엔진이다 보니 그래픽 처리 부분은 거의 없다 싶이 하여, 만들게 된 것이 바로 fl_imgtk 입니다. M$VC 쓰는 분들이 FLTK 를 쓰는 경우가 거의 없다는 가정 하에, (사실 FLTK 를 쓰는 가장 큰 이유는 동일 소스로 Windows, Linux, Mac 에서 동일한 프로그램을 만들기 위한 목적) Windows 의 경우는 MinGW-W64 로 빌드 할 경우 가장 효과적인 성능..

    Developement/C/C++
    2017.03.29 18:32
  • FLTK Fl_Group 을 blur 된 배경 이미지로 만들기.

    FLTK 1.3.4-1 부터 좀 더 강력 해 진 영역이 있다면, 바로 Offscreen surface 에 특정 FLTK widget 을 그려 이것을 Fl_RGB_Image 로 만들 수 있다는 것 입니다. 그래서 아래 처럼 빨간 점선 안의 특정 영역 (Fl_Group* grpViewer 영역) 을 Fl_RGB_Image 로 만들고, 이를 fl_smimg 를 이용하여 burred 된 이미지로 간단히 만들 수 있습니다. ▼ 이 방법은 다음과 같은 원리로 진행 됩니다. (필요 사항, fl_smimg) bool Fl_GroupAniSwitch::generate_blurred_img( Fl_Group* src, Fl_RGB_Image* &dst ) { if ( src != NULL ) { Fl_Image_Surfa..

    Developement/C/C++
    2017.03.23 17:15
  • [FLTK] HICON 에서 Fl_RGB_Image 로 변환.

    이 소스 코드는 rk HDRi Studio 을 만들면서 필요에 의해서 만들어진 것 입니다만, FLTK 에서 자체적으로 윈도우를 만들어 쓸 때, 아이콘을 그리고 싶은데 막상 HICON 을 이미지 원본으로는 쓸 수 없을때 Alpha 를 가진 32bit RGB 이미지로 만들어 쓰기에 좋다고 하겠습니다. 먼저 icon_to_flrgb() 함수는 다음과 같습니다. Fl_RGB_Image* icon_to_flrgb(HICON hIcon) { BITMAP bm; ICONINFO iconInfo; GetIconInfo(hIcon, &iconInfo); GetObject(iconInfo.hbmColor, sizeof(BITMAP),&bm); int width = bm.bmWidth; int height = bm.bmHe..

    Developement/C/C++
    2017.02.20 10:38
  • gcc/MinGW 6.x 부터 생긴 경고, misleading indentation

    gcc 5 버젼 부터 개발을 해 오던 librawprocessor 에서 눈치를 못 채고 있던 컴파일 경고가 뜨기 시작 한걸 이번에 알았습니다. 아직 major release 가 이루어 지지 않았기 때문에 신경을 덜 쓴 것도 있긴 합니다만, 갑자기 이 오류가 눈에 띈 것은 누군가의 계시인건지 ... 이 오류는 gcc 6 버젼 부터 강화된 여러 조건별 비교문에 따른 것으로 아래처럼 코드가 되어 있는 경우 발생 합니다. 이 오류는 GNU gcc 6 가이드 웹 페이지를 보면 나오는데,https://gcc.gnu.org/gcc-6/porting_to.html 아래 처럼 복합적인 비교문으로 포인터와 숫자로 넘어오는 값을 함께 비교 할 때에는 브레이스 {} 로 묶어 주어야 합니다. 그래서 아래처럼 코드를 변경 하면 ..

    Developement/C/C++
    2017.01.23 14:59
  • 여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 마지막 날.

    몇가지 잘못 구현된 부분을 수정 하고, 간략화 하여 어느정도 복잡도를 가지는 영역 내를 채우는 것을 성공리에 완성 하였습니다. 아직 테스트를 해 보면 매우 복잡한 영역은 여전히 node 에서 잘못 처리되는 경우가 발견 되긴 합니다만, 이 부분은 다음 구현으로 넘기고 이번엔 완료된 것을 통해서 약간의 알고리즘 설명을 남겨 보도록 하겠습니다. 먼저 참고한 알고리즘은 Darel Rex Finley 라는 사람의 페이지를 통해서 입니다. Polygon fill algorithm 알고리즘은 알고나면 꽤 간단 합니다. 먼저, 삼각형을 하나 그린다 치면, 아래 처럼 좌표계가 만들어 지고, 이 좌표계는 vector < x, y > 에 차곡 차곡 쌓이게 됩니다. 여기서 vector < x, y > 는 0번째와 마지막 이 ..

    Developement/C/C++
    2016.12.21 18:13
  • 여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 둘째날.

    이전에 polygon 내 fill 을 하기 위한 알고리즘을 파다, 여러 개선점을 찾기 위한 노력을 통해 답을 찾기 시작 하고 있습니다만, 현재 fill 을 실패 하는 이유를 찾기 위해 돌려 보고 있다 보니, 아래처럼 node 가 짝이 안맞는 경우가 생기는 것을 알았습니다. 최적화된 알고리즘 검출을 위해 re-order 등을 수행하는데도, 검출에 실패 하는 영역이 나오는 것을 보면, 이것은 다른 알고리즘을 찾아야 할 것으로 보입니다. 현재까지 돌려 본 것을 압축해서 올려 봅니다.코드 및 CBP, 디버깅용 바이너리 파일 압축본 다운로드 필요사항: Code::Blocks, MinGW-W64, FLTK-1.3.4 (또는 FLTK-1.3.4-TS).

    Developement/C/C++
    2016.12.20 18:01
  • 여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 첫쨋날.

    librawprocessor 에 새로 끼워 넣고 싶은 기능 중 하나가, 바로 포토샵 같은데서 자주 쓰는 그물망 기능인가 하는 겁니다, 여러 포인트를 찍어 그 영역 안을 구하는 것. 그래서 그걸 FLTK 로 간단히 만들고, 내부 알고리즘은 다음 URL 을 통해 한번 구현을 해 보기로 했습니다.http://alienryderflex.com/polygon_fill/ 해당 싸이트엔 C 로 간단히 되어 있는걸 C++ 로 좀 더 복잡하게 변경 하여 만들어 보니 ... 간단한 벡터 그래픽 영역은 처리가 되는 것 같습니다만 ... 복잡도가 올라가면 실패를 합니다. 아직 이유는 알아 내야 하는 부분이 많습니다만, 현재 odd-even 검사 부분이 뭔가 누락이 되었다거나, conflict 영역 검출 등은 뭔가 원래 소스대..

    Developement/C/C++
    2016.12.19 18:13