이클립스를 사용하다가 다음과 같은 에러를 만났다.

 

Access restriction: The type HttpServer is not accessible due to restriction on required library C:\Program Files (x86)\Java\jdk1.7.0_05\jre\lib\rt.jar

 

에러가 발생하는 곳은 import 하는 부분

 

import com.sun.net.httpserver.HttpServer;

 

구글링을 해 보니 원인은 "HTTP server"는 Sun JRE6에 포함되나

 

표준 Java에는 포함되지 않기 때문.

 

따라서 이클립스가 접근을 막도록 되어 있다.

 

이 문제를 해결하기 위해서는 간단하게 설정을 변경해주기만 하면 된다.

 

 

이클립스 메뉴 Window -> Preferences 창을 열어서

 

Java -> Compiler -> Errors/Warnings 를 보면

 

굵은 글씨체로 되어있는 Deprecated and restriced API 라는 메뉴가 있다.

 

이것을 펼쳐서 "Forbidden reference (access rules):" 항목을

 

Error에서 Warning으로 바꾸어주면 된다.

 

Apply를 누르면 설정이 바뀌었으니 전체 리빌드를 하겠냐고 묻는 창이 뜨는데 Yes를 누른다.

 

Posted by Kugi

댓글을 달아 주세요

  1. 찜닭 2014.06.01 02:07 신고  댓글주소  수정/삭제  댓글쓰기

    하.. 정말 감사합니다.. 노트북 부실뻔했는데 님덕분에 안뿌셨네요 ^^

  2. 안나 2014.12.04 19:03 신고  댓글주소  수정/삭제  댓글쓰기

    앗 감사합니다! JDK버젼을 하도 여러개깔아놔서 얽혀서 그런가하고 낙심먼저했는데, 다행히 간단히 해결되네요...ㅋㅋ




적분 영상(integral image)이란 쉽게 말해서 다음 픽셀에 이전 픽셀까지의 합이 더해진 영상이다. 즉, 다음과 같은 수식으로 표현되는데

여기서 integImage(x, y)는 적분 영상이고 orgImage(x', y')는 원래 영상이다.

적분 영상의 장점은 특정 영역의 픽셀 값의 총합을 매우 쉽게 구할 수 있다는 점이다.

다음의 그림을 보면 이해가 쉬울 것이다.

8*8 크기의 임의의 1채널 영상을 예로 든 것이다. 좌측 상단이 원점이다.

왼쪽의 원래 영상에서 칠해진 영역의 넓이는

오른쪽 적분 영상에서 녹색 영역의 합과 주황색 영역의 합을 뺀 것과 같다.

(물론, 위 영상 전체의 합은 2250으로, 적분 영상에서의 마지막 값과 같다.)

이것을 수식으로 나타내면 다음과 같다.

다음의 그림을 참고하면 원리를 알 수 있다. 

D 영역의  픽셀 값을 얻기 위해서 점 d까지의 넓이에서 점 b까지의 넓이와 점 c까지의 넓이를 뺀 후

두 번 빼진 점 a 까지의 넓이를 한 번 더해줌으로써 D 영역의 넓이를 구할 수 있는 것이다.

  ( [D] = [A+B+C+D] - [A+C] - [A+B] + [A] )

이러한 적분 영상은 하나의 영상에 대해 특정 영역의 픽셀 값의 합을 여러 번 구해야 할 필요가 있을 때 유용하게 사용할 수 있다.

 

아래는 적분 영상을 구하는 C++ 함수의 예시(example)이다.

 

소스 보기 (Open)


Posted by Kugi

댓글을 달아 주세요

  1. 안녕하세요 2013.06.04 13:35 신고  댓글주소  수정/삭제  댓글쓰기

    유용한 정보 잘 보고 갑니다!

    수고하세요.

  2. 정진범 2013.07.11 20:36 신고  댓글주소  수정/삭제  댓글쓰기

    좋은정보에 감사합니다! 덕분에 적분이미지에 대해 이해를 했습니다~!

  3. 따옥 2014.02.06 16:24 신고  댓글주소  수정/삭제  댓글쓰기

    감사합니다. 잘 익혔습니다!!!

  4. 체셔 2014.04.27 15:39 신고  댓글주소  수정/삭제  댓글쓰기

    마지막 부분에 ( [D] = [A+B+C+D] - [A+C] - [B+D] + [A] ) 이 식이
    D = (A+B+C+D) - (A+C) - (A+D) + A
    이렇게 돼야되는 것 아닌가요? 하여튼 쉽게 풀어 써주신 글, 잘 보고갑니다~

    • Kugi 2014.10.13 13:59 신고  댓글주소  수정/삭제

      댓글 감사합니다.
      오류가 있었네요. 정확하게는
      D = (A+B+C+D) - (A+C) - (A+B) + A
      입니다. 본문 수정하였습니다.

  5. 영상처리초보자 2016.01.21 18:34 신고  댓글주소  수정/삭제  댓글쓰기

    D = (A+B+C+D) - (A+C) - (A+B) + A 라는 식에서
    D = (A+B+C+D) - (A+C) - (B) + A라고 하면은 안되는건가요..? 하드웨어로 구현하려고해서 로직 갯수를 줄이기 위해 CSA를 이용할텐데 궁금하네요..

  6. 박민서 2017.05.22 02:21 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요? 적분영상에 관한 포스팅 관련해서 문의를 드리고 싶은것이 있어서요.
    말씀하신것 중에 "이러한 적분 영상은 하나의 영상에 대해 특정 영역의 픽셀 값의 합을 여러 번 구해야 할 필요가 있을 때 유용하게 사용할 수 있다." 라고하셨는데요 이게 이해가 안가서요. 부가적으로 설명을 좀더 해주실수있으신지요?

    • Kugi 2017.06.19 04:31 신고  댓글주소  수정/삭제

      답글이 늦었습니다. 지금은 벌써 답을 얻으셨을거라 생각하지만 그래도 간략하게 말씀드리자면, 모든 화소 위치에서 주변 화소들의 합을 각각 계산하고 싶을 때 중복된 계산을 하지 않게 해 준다는 뜻입니다.
      가령 연속된 화소 p1, p2, p3, p4, p5가 있을 때 이웃한 세 개 픽셀들의 합을 모든 위치에서 계산하고 싶다면 (양 끝은 제외합니다.) p1+p2+p3, p2+p3+p4, p3+p4+p5 를 계산하게 될 것입니다. 이 때 (p2+p3)를 두 번 계산했고 (p3+p4)를 두 번 계산하여 낭비가 발생하는 데 전체 영상과 마스크 크기가 커질수록 이런 낭비가 심해지는 것을 알 수 있습니다. 적분영상을 사용하면 어느 위치의 합을 계산하더라도 네 개의 값을 이용한 사칙연산만 하면 되므로 훨씬 효율적인 계산이 가능해집니다.

  7. 2017.08.11 17:24  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다




영국 옥스퍼드 대학의 로봇 연구 그룹 페이지.

그중에서도 Visual Geometry Group에서 제공하는 연구 페이지에서는

영상처리를 위한 각종 Detector, Descriptor 등의 소스 코드를 구할 수 있다.

http://www.robots.ox.ac.uk/~vgg/research/

http://www.robots.ox.ac.uk/~vgg/research/affine/detectors.html



머신러닝 등 각종 강의들의 자료

http://www.robots.ox.ac.uk/~az/lectures/

Posted by Kugi

댓글을 달아 주세요




android-sdk를 이용하기 위해 cygwin에서 javah로 c/cpp용 jni 헤더파일을 추출하려는 도중

"Not a valid class name" 이라는 예외를 만났다.

패키지 경로를 구분할 때 "." 이 아닌 "/"를 사용했기 때문이었다.

처음도 아닌데 정신이 오락가락 했나보다.

 

$ javah -jni com/kut/ssvs/camera/KugiAndroidImageProcessor
Exception in thread "main" java.lang.IllegalArgumentException: 
Not a valid class name: com/kut/ssvs/camera/KugiAndroidImageProcessor
        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:177)
        at com.sun.tools.javac.api.JavacTool.getTask(JavacTool.java:68)
        at com.sun.tools.javah.JavahTask.run(JavahTask.java:509)
        at com.sun.tools.javah.JavahTask.run(JavahTask.java:335)
        at com.sun.tools.javah.Main.main(Main.java:46)

 

Posted by Kugi
TAG android, javah, NDK

댓글을 달아 주세요



티스토리 툴바