본 내용은 대구가톨릭대학교 컴퓨터공학과 4학년 1학기 수업 컴퓨터 영상신호처리에 기반함
공부한 내용을 복습을 위한 정리
추가 필요 개념 또는 추가 학습내용도 올라감

제1-1장 영상처리의 개요 및 프로그램 작성함수

제1-2장 디지털 영상처리의 기초

제2장 포인트 처리

제3장 영역 처리

제4장 영상 개선과 복원

제5장 디지털 간색

제6장 기하학적 처리

제7장 영상 변환

제8장 영상 압축

Written by 캐슬서클


포인트 처리

포인트 문자 그대로 이미지 상에서 한 점에 대한 처리

산술 연산 (   +, - , x , / ), 논리 연산과 평활화 등

본 게시글은 포인트 처리 방식인 산술, 논리 연산, 히스토그램 평활화에 대해 간략히 서술한다.



산술 연산

화소 (픽셀) 에 일정한 값을 더하거나 나누는 연산


<그림 1 레나 이미지를 이용한 산술 연산 결과>

(+)  픽셀 + 변수 값 : 영상의 밝기 증가 

( -) 픽셀 - 변수 값 : 영상의 밝기 감소

(x)  픽셀 x 변수 값 : 영상의 대비 증가 ( 어두운 영역과 밝은 영역의 대비가 증가하여 뚜렷해진다)

(/)  픽셀 / 변수 값 : 영상의 대비 감소 ( 어두운 영역과 밝느 영역의 대비가 감소하여 희미해진다)


그림 1은 레나 이미지에 각각의 산술연산 한 결과이다. 더하기 연산의 경우 입력 영상에 비해 밝아짐을 확인 가능하며, 마이너스 연산의 경우 어두워짐을 확인할 수 있다. 곱하기 연산은 색상의 대비가 증가하여 더 선명한 이미지를, 나누기 연산의 경우 대비가 낮아서 흐릿해진 이미지를 확인할 수 있다.


논리 연산

AND, OR, XOR, 등등.. 


XOR 연산 : 비트 값 일치 할 경우 0, 일치하지 않을 경우 1


XOR 연산을 이용 시 원하는 화소의 분표 또는 제거를 할 수 있음

<그림 23그레이 스케일 이미지에서 128 , 250 비트 값 XOR 연산>

그림 2에서 확인 할 수 있듯이 128, 250과 일치하는 값이 검은색으로 나타남을 확인할 수 있다. 그러나 두 결과 이미지가 똑같은 위치를 표시함을 알 수 있는데 이는 강의 자료 및 교재의 오류로 보인다.

히스토그램 평활화

히스토그램 (histogram) : 이미지 화소의 분포도, 그림 3과 같이 막대 그래프로 표현하곤 한다.

<그림 3 그레이 스케일 이미지에서 128 , 250 비트 값 XOR 연산>

히스토그램은 이미지 화소의 분포도를 나타낸다. 이를 통해 화소가 균일, 치우침을 알수 있다. 전처리 과정에서 주로 사용된다.
평활화는 그림 3과 같이 낮은 밝기를 가진, 즉 한쪽으로 치우쳐진 픽셀의 분포를 균일하게 펴주기 위함이다. 물체는 유사한 밝기를 가지기 때문에 평활화하여 물체와 배경의 대비를 뚜렷하게 할 수 있다. 

평활화 방법

추후 서술

히스토그램 명세화

히스토그램 평활화와 유사하게 작동한다. 둘 모두 색상의 분포도를 변화시키는 측면에서 같다. 그러나 명세화의 경우 히스토그램 전체가 아닌 일부분을 변화한다. 즉, 그림 4처럼 사용자가 원하는 부분 또는 원하는 형태의 히스토그램을 갖도록 변화시킨다.

<그림 4 히스토그램 명세화 결과>




비트 플레인

<그림 5 비트 플레인>


우리가 쓰는 이미지 RGB 색상은 각각 8 비트로 3채널의 이미지다. 그레이 스케일 ( 흑백 영상 )은 단일 채널의 이미지로 8비트 (0 ~ 255)의 값을 표현할 수 있다. 즉 8비트가 모여 한화소를 구성하게 되는데 각각의 비트를 잘라 놓은 것이 비트 플레인이다. 그림 5는 비트 플레인을 그림으로 쉽게 표현하고 있다.

비트 플레인은 주로 영상의 압출에 쓰이는 방식으로 MSB 는 원본 영상의 이미지를, LSB 의 경우에는 잡음을 나타낸다.

<그림 6 비트 플레인 결과>

그림 6은 비트플레인 결과를 보여준다. 그림에서 확인할 수 있듯이 플레인 3~0은 원 영상을 알아볼 수 없을 정도로 심한 잡음, 나머지 플레인은 원본 영상의 정보를 포함하고 있다. 따라서 압축 시 플레인 송신 측에서 7~4 만 전송하고, 수신 측에서 나머지 플레인을 랜덤 잡음으로 합치게 되면 원본과 비슷한 영상을 얻을 수 있다.




작성자 : Black빈

Imshow






Imshow는 OpenCV C++에는 지원을 하고 있지만 JAVA를 사용할 경우에는 지원이 되지 않기에 이 방법을 소개한다.






출처 내에서 소개하는 사용법으로는 단순히 jar파일을 다운 받아 라이브러리에 추가하거나 프로젝트 빌드패스를 추가하는 것

하지만 jar파일 안에 잘못된 라이브러리를 불러와(example.java -> import org.opencv.highgui.VideoCapture) 

highgui라이브러리를 찾을 수 없다는 오류를 발생시킨다.






example.java 파일안에 highgui라이브러리를 불러오는데 이 highgui는 OpenCV3.0.0부터 지원이 되지 않는다.

대신, Imgcodecs와 VideoIO를 이용하면 highgui를 대신해 사용할 수 있다.





오류를 해결하기 위해서 출처에서 Imshow.java코드만 복사해 따로 패키지를 설정하여 클래스를 생성해 주면

바로 사용이 가능하다.


Ex)



Imshow클래스를 import해 준 다음 

아래의 코드처럼 제목만 정하거나 창 사이즈도 같이 조절이 가능하다.


1
2
3
4
5
Imshow im = Imshow("title"); //제목 설정
im.showImage(Mat image); //이미지 출력
 
Imshow im = Imshow("title"windowSize_width, windowSize_height); //제목 설정 및 창 사이즈 조절
im.showImage(Mat image); //이미지 출력
cs




출처 : https://github.com/master-atul/ImShow-Java-OpenCV


Written by Nyaong



Exif


교환 이미지 파일 형식 (Exif; EXchangable Image File format)은 디지털 카메라에서 이용되는 이미지 파일 포맷이다.


라고 하는데 그냥 간단하게


사진에다가 정보를 태그 해주는 걸 의미



윈도우에서 우클릭 -> 설정으로도 확인 할 수 있다.




해당 방법은 GPS 뿐만 아니라 핸드폰 모델, ISO, 선명도 등을 태그 할 수 있는데 사용 법에 대하여 설명 드릴께요~



우.선!  안드로이드의 경우


Exif 지원 하는 파일명으로는 JPEG, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW, RAF.


인데 뭐.. JPEG를 제외하고는 다들 생소 할 테니 넘어가도록 하자!(파일 압축을 png와 같은 걸로 압축 해놓으면 안되요)






사용법



쓰기



1
2
3
4
5
6
7
public void Exif_Tag(String image_location){
    
    ExifInterface exif = new ExifInterface(image_location);
    exif.setAttribute(ExifInterface.TAG_MAKE,"SAMSUNG");    // 제조사 기입
    exif.setAttribute(ExifInterface.TAG_MODEL,"SHV-E201L");    // 모델명 기입
    exif.saveAttributes();    // 입력한 값 
}
cs


읽기



1
2
3
4
5
6
7
8
public void Show_Exif_Tag(ExifInterface exif){
    
    String Attribut = "Exif";
 
    Attribut += getTagString(ExifInterface.TAG_MAKE, exif);
    Attribut += getTagString(ExifInterface.TAG_MAKE, exif);
    
}
cs



이런 식으로 사용 하시면 됩니다!


단. GPS 위도/경도 입력시 단위 변환 후 기입을 해야되서 참고 하시기 바랍니다 :)


참고 자료 : StackOverflow (Link)

'연구 및 공부 이야기 > C, C++, JAVA' 카테고리의 다른 글

[C] 연산자 우선순위  (0) 2017.05.20
본 내용은 대구가톨릭대학교 컴퓨터공학과 4학년 1학기 수업 컴퓨터 영상신호처리에 기반함
공부한 내용을 복습을 위한 정리
추가 필요 개념 또는 추가 학습내용도 올라감

제1-1장 영상처리의 개요 및 프로그램 작성함수

제1-2장 디지털 영상처리의 기초

제2장 포인트 처리

제3장 영역 처리

제4장 영상 개선과 복원

제5장 디지털 간색

제6장 기하학적 처리

제7장 영상 변환

제8장 영상 압축

Written by 캐슬서클


공간 주파수 해상도

  • 주파수에 따라 물체의 인식 정도가 달라진다.
  • 그림 1에서 왼쪽 사각형과 오른쪽 사각형 선 간격이 다름을 알 수 있다.
  • 왼쪽의 그림은 오른쪽의 그림과 비교 했을 때 대비되는 선의 간격이 넓음을 확인 가능하다.
  • 이에 왼쪽의 그림은 저주파 이미지, 오른쪽 그림은 고주파 이미지라 부를 수 있다.
  • 또한 저주파는 높은 에너지를 가지며, 고주파는 낮은 에너지를 가진다.
  • 저주파 이미지는 멀리서 볼 경우 검은색 이미지로 보인다. 이에 에너지가 낮다고 한다.

<그림 1> (좌) 저주파 이미지 (우) 고주파 이미지


    인간의 시각 시스템

    • 큰 의미가 없기 때문에 스킵함. 필요, 요청에 의하면 업로드 할 예정

    공간해상도

    • 이미지 영상을 구하는 화소의 개수
    • 흔히 자주 듣는 1080p, 720p가 공간 해상도와 같다.
    • 1080, 720은 세로의 픽셀 수를 의미하며 우리는 공간해상도 개념을 자연스럽게 쓰고 있다.
    <그림 2> 공간 해상도 별 레나 이미지
    • 그림 2의 1행 1열은 가장 높은 해상도 256 x 256 이며, 2행 2열은 가장 낮은 해상도 16 x 16 이다.
    • 해상도가 높을 수록 이미지가 표현되는 픽셀블럭이 눈에 안띔을 볼 수 있다.

    밝기 해상도

    <그림 3> 밝기 해상도에 다른 레너 이미지

    • 그림 3은 공간 해상도와 마찬가지로 밝기 해상도 별 레나 이미지이다.

    • 공간 해상도 처럼 높은 밝기 해상도 일 수록 밝기 표현 범위가 넓다




    안드로이드 어플리케이션 리버싱을 처음 시도 할 때 대부분의 유저들이 정적 분석을 시도하게 되는데


    이때 Smali(Dalvik code) 코드로 변환 하여 


    해석 하시는 방법으로 진행 하는 분이 많은데요.


    좀더 쉽게!


    직관적으로!


    얍삽하게




    java 코드를 원시코드에 가깝게 보면서 리버싱을 진행 하시게 되면 쉽게 코드 해석을 할 수 있게되어 빠르게 진행이 가능 한데요.


    해당 툴들을 소개 해드리려고 합니다.






    Dex2jar / JD-GUI


    Dex2jar : .dex 을 smali / .jar 등으로 변환을 시켜주는 프로그램


    JD-GUI : .jar 파일로 압축된 .class 파일들을 java 코드로 보여주는 프로그램




    구동 환경


    Window, linux( + mac)

    /** window 는 .bat   linux 는 .sh 파일로 존재 **/


    으로 다들 가지고 계신 컴퓨터 환경에서는 대부분 돌아가실듯 합니다!



    다운로드


    Dex2jar


    github : https://github.com/pxb1988/dex2jar


    SourceForge : https://sourceforge.net/projects/dex2jar/files/



    JD-GUI


    공식 : http://jd.benow.ca/


    사용 방법


    * 해당 시연은 직접 제작중인 안드로이드 어플리케이션 기반으로 테스트 하였습니다.

    ** java 소스코드 보안기법에 따라 특정 부분이 보이지 않을 수도 있습니다.




    Dex2jar



    1. 역공학을 진행할 어플리케이션을 압축 해제 프로그램을 사용하여 미리보기 한후 


    classes.dex 파일을 다운받은 Dex2jar 폴더에 집어 넣는다





    2. dex2jar 폴더에 넣은 classes.dex 를 drag & drop으로 .jar 파일을 생성 합니다.




    3. 추출한 classes.jar 파일을 JD-GUI 프로그램을 사용하여 열기




    요로코롬 하시면 모든 소스코드가 원시코드에 가깝게 출력되게 됩니다!


    뭐.. 이정도 하셨으면 Dalvik 와 비교하여 쉽게 해석을 하실 수 있습니다 :)





    작성자 : Nyaong

    라즈비안에서 작업을 진행하다가 보면 진행사항을 정리하기 위해 화면을 스크린샷 찍어할 때가 있습니다.

    Window에서는 캡쳐도구를 써도 되고 스크린샷 키를 사용해도 됩니다만

    라즈비안에서는 어떻게 해야 할지를 모르겠더라구요.


    그래서 이번에는 라즈비안 환경에서 화면을 스크린샷찍는 내용입니다.

    아주 간단합니다.


    scrot을 설치해서 사용하면 됩니다.


    1
    sudo apt-get install scrot
    cs


    그리고 스크린샷을 찍고 싶을 때마다 


    1
    scrot
    cs


    명령어를 사용하면 됩니다.

    그럼 스크린샷이 /home/pi 경로에 자동으로 이름이 지정되어 저장됩니다.


    1
    scrot /home/pi/anything_name.png
    cs


    혹은 이름과 경로를 지정하고 싶으면 위와 같이 /경로/아무이름이나지정.확장자

    형식으로 지정해줍니다.


    그럼 지정경로에 사진이 스샷이 저장되어 있음을 확인 할 수 있습니다.




    작성자 : vertex50



    라즈비안이란 라즈베리파이 전용 OS(운영체제)입니다.

    라즈비안은 가벼운 라이트와픽셀로 이루어져 있습니다.


    Lite는 command환경에 적합한 유저들이 사용하기에 좋고 

    PIXEL의 경우에는 대부분의 한국인들처럼 직관적 UI를 이용하는이들에게 좋다. 그렇다고 command환경이 없는 것도 아니고


    그럼 PIXEL을 사용하지 왜 Lite를 사용하는가.

    Lite가 더 가볍기 때문입니다.

    본인의 타입에 맞게 사용하면 됩니다.


    이 주제에서 다룰 내용은 

    PIXEL에서 N포털 사이트에 접속 했을때 한글 깨짐 현상을 보고 해결 한 내용입니다.


    처음 한국어로 이루어진 사이트를 켜면 사각형으로 대체되어 글자가 깨져 있는 형태를 볼 수 있습니다.

    잘은 모르지만 처음에는 ASCII 인코딩 방식 때문일 것이라고 생각해서 UTF로 진행 했는데, 

    해결이 되지 않아서 검색해본 결과 TTF포맷으로 진행해야한다고..


    명령어는 아래와 같습니다.


    1
    sudo apt-get install ttf-unfonts-core
    cs






    (사실 N포털인지 D포털인지 중요한것은 아니기 때문에. 가리다가 너무많아서 그만둔...)


    작성자 : vertex50


    이전에 설치해둔 git을 사용하여 WiringPi를 설치합니다.

    WiringPi란 라즈베리 GPIO제어를 하는 방법들 중에서 C언어를 사용하여 

    GPIO를 제어하도록 해줍니다.

    참고로 GPIO(Genrel Purpose IO)는 입출력 가능 IO핀이며 입력과 출력형태로

    제어 가능하지만 입력과 출력을 동시에 할 수는 없습니다.

    (즉 초기 세팅시 input핀으로 지정해 놓은 핀을 중간에 output핀으로 사용이 불가능 하다는 말 입니다.)


    WiringPi설치방법은 다음과 같습니다.



    1
    git clone git://git.drogon.net/wiringPi
    cs



    그리고 WiringPi가 잘 설치 되어 있는지 확인합니다.

    참고로 명령어에서 WiringPi는 W가 소문자를 사용합니다.




    작성자 : vertex50


    라즈베리 파이를 사용해서 git을 사용하기전에 

    git을 설치 하는 과정이 필요합니다.


    아래는 git 설치과정입니다.

    일단 git을 install 해 줘야 합니다.


    명령어는 다음과 같습니다.


    1
    sudo apt-get install git-core 
    cs




    install 되지 않는 경우 네트워크를 확인 해보기 바랍니다.


    작성자 : vertex50

    출처 : 2017년 춘계학술발표대회 논문집 제24권 제1호


    아두이노 기반 청각장애인용 스마트 밴드 개발


    윤여진*, 김은경**, 김석훈*

    *순천향대학교 컴퓨터소프트웨어공학과, **순천향대학교 컴퓨터학과


    정리 : 02

    2017.05.23



    1. 서론

      • 청각장애인을 위한 보조기구들이 성능이 뛰어나면 가격이 비싸고, 저렴한 것은 성능이 부족하다는 문제 제기.

      • 아두이노를 기반으로 하여 기존의 다양한 청각보조기구 대비 저렴하게 개발.




    2-1. 본론 : 관련연구
      • 소리 인식을 위한 소리측정센서 LM386사용.
      • 시각적인 이미지 표현을 위한 LED matrix 모듈 8*8 크기(3cm*3cm) 사용.
      • 소리가 인지되었음을 촉각적으로 알려주는 진동 모터 모듈 사용.

    2-2. 본론: 시스템 설계
      • 외부에서 일정 값 이상의 소리를 소리 감지 센서가 감지하면, 아두이노에서 LED matrix와 진동 모터 모듈에 신호를 주어 사용자에게 시각적, 촉각적 알림이 전달되어 사용자가 인식이 가능하게 함.




    3. 결론 및 향후 연구
      • 청각장애인의 사고 확률을 낮추고, 신뢰도 높은 정보를 제공하는데 목적을 둠.
      • 아두이노를 사용했기 때문에 저렴한 가격을 기대 할 수 있고, 간단하지만 효과적인 기술을 이용하여 사고 확률을 낮출 수 있을 것으로 기대됨.
      • 외부에서 발생하는 소리의 파형을 이용하여 분석, 비교하는 기술을 추가하여 위험 상황과 위험하지 않은 상황에 대한 정확한 정보를 알려줄 수 있다면, 더 큰 도움이 될 것으로 예상됨.
      • 청각장애인을 위한 스마트 밴드는 아두이노 프로 미니버전을 사용하여 크기를 줄이고, 소리 감지 센서와 진동 모터 모듈은 지금보다 조금 더 작게 만드는 소형화를 진행 할 예정.











    + Recent posts