본문 바로가기

Developement/C/C++

(71)
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..
FLTK 에 부족한 페이지 전환 애니메이션 추가중 .. FLTK 에 없다 싶이 한 기능 중 하나가, 바로 애니메이션 처리 입니다. 요즘 GUI 대세를 보면 뭔가 간단한 애니메이션이라도 집어 넣어 만드는게 예의가 아닌가 하는 바람으로 가칭 Fl_GroupAniSwitch() 라는걸 만들어 보고 있습니다. FLTK 특성상, 배경이 안그려 지는 것들을 감안해서 Fl_Group 중, 가려지는 것에 대해 offscreen 으로 이미지를 그린 다음, 이것을 Bilinear 로 10%로 줄였다가 다시 원래 크기로 Bicubic Filter를 적용해서 그리면 보통 우리가 아는 Blurred background 가 됩니다. 현재 제가 만들어 쓰는 fl_smimg 가 OpenMP 를 적용해서 돌기 때문에 1080p 정도의 이미지는 얼마 걸리지 않는 시간 내에 처리가 가능한 관..
Look up table 생성이 이상하다 ... 오래된 영상 처리 관련 부분을 새로 만들고 있는 중 입니다만, 아주 기가막힌 것들을 많이 보게 되었습니다. 물론 새로 만드는 것엔 이런 부분들이 존재할 공간 따위는 없겠습니다만 ... 영상처리 가장 기본중 하나인 Look up table (LUT) 생성을 하는 알고리즘을 기존걸 새로 만드는 중 입니다만, 대체 무슨 생각으로 만들었었을까? 란 의문이 많이 들고, 사실 이걸 왜 쓰는지도 모를 것들이 있어 난관인 부분이 큽니다. 아래의 그래프는 기존의 알고리즘을 그대로 구현 해 보면서 다시 만들어 본 것으로 ... 그나마 다 정상으로 돌아 가는 듯 한데 .. 문득 Sigmoid 곡선을 이용한 LUT 생성이라는 걸 만들어 놨길래 이상한 수식을 쓰고 있어 검증을 해 보니 아래 이미지 처럼 알수 없는 걸 그리고 있..
의료영상에 CLAHE 알고리즘 적용. 의료 영상의 품질을 높이기 위해 이전에 사용한 High Dynamic Tone Mapping 에 이어, 이번엔 CLAHE 라는 공식을 적용 해 보았습니다. CLAHE 는 Contrast Limited Adaptive Histogram Equalization 의 약자로서, grey image 에 (또는 RGB 의 Luminance로) 적용 할 수 있는 대조 이미지 처리 프로세서로서, 꽤 효과적인 결과물을 만들어 내는 듯 합니다. 일단 CLAHE 알고리즘은 이미 Wikipedia 등에 올라 와 있으며, 저는 이 고전적인 알고리즘을 그대로 사용해서 구현 해 보았습니다. 물론 컴파일러는 gcc 6.2 를 사용하였습니다. 일단 parameter 는 3072x3072 영상에, 100~16384 사이의 range 와..
[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..
FLTK MDI form 구현... HDR imaging 을 시작 한 바, 이젠 color 쪽에서도 처리 할 수 있도록 만들고자 나름 있어 보이는 이름의 RK HDRi Studio 란걸 Open Source 로 만들기 시작 했습니다. 물론 아직 commit 은 커녕, repository 도 만들지 않았습니다만. 제목은 MFC 에나 있는 MDI form 을 FLTK 에서 구현 해 보고 있습니다만, 문득 드는 생각이 ... 이 짓거릴 왜 구현하고 있는거지? 란 생각이 듭니다. 그래도 만든거고 하니 어쨋든 관련 소스는 공개 할 생각 이긴 합니다만, 대체 이걸 구현해서 이 구태적인 GUI 형태를 왜 써야 하는걸까? 란 의문도 들고, 복잡 하네요. 구현도 그리 좋지 못하고. FLTK 를 쓰고 있지만, 윈도우 자체는 자체에서 그리는 형태가 되서 th..
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 아래 처럼 복합적인 비교문으로 포인터와 숫자로 넘어오는 값을 함께 비교 할 때에는 브레이스 {} 로 묶어 주어야 합니다. 그래서 아래처럼 코드를 변경 하면 ..
여러 포인트를 찍어 폴리곤 채우기 구현 시도기, 마지막 날. 몇가지 잘못 구현된 부분을 수정 하고, 간략화 하여 어느정도 복잡도를 가지는 영역 내를 채우는 것을 성공리에 완성 하였습니다. 아직 테스트를 해 보면 매우 복잡한 영역은 여전히 node 에서 잘못 처리되는 경우가 발견 되긴 합니다만, 이 부분은 다음 구현으로 넘기고 이번엔 완료된 것을 통해서 약간의 알고리즘 설명을 남겨 보도록 하겠습니다. 먼저 참고한 알고리즘은 Darel Rex Finley 라는 사람의 페이지를 통해서 입니다. Polygon fill algorithm 알고리즘은 알고나면 꽤 간단 합니다. 먼저, 삼각형을 하나 그린다 치면, 아래 처럼 좌표계가 만들어 지고, 이 좌표계는 vector 에 차곡 차곡 쌓이게 됩니다. 여기서 vector 는 0번째와 마지막 이 ..