- 인터넷 이용을 위해선 해당 사이트의 IP 주소를 알아야 하며, 이 주소는 한 눈에 들어오지 않는 숫자로 구성되어 있다.

- 따라서 이를 쉽게 기억하기 위한 이름 체계를 만들었고(FQDN), 사용자들이 사용하는 FQDN을 실제 인터넷에서 필요한 IP 주소로 변환하는 서비스가 필요하며, 이를 DNS(Domain Name Service)라고 한다.

 

DNS

:: 웹(web) 상에서 호스트 컴퓨터가 도메인 이름을 IP주소로 변환하기 위해 DNS 서버에게 질의 응답을 하는 서비스

 

DNS Spoofing

:: DNS 트래픽을 공격자가 가로채고, 위조된 IP 주소로 응답하여 호스트 컴퓨터가 위조된 IP 주소로 접근하게끔 하는 공격

:: DNS 캐시 목록에 위조된 레코드 정보를 추가시켜 Client가 URL을 입력하면 위조된 웹 서버로 접속을 유도하여 정보를 탈취하거나 DNS 서버를 공격한다.

:: DNS 서버 자체를 공격하여 DNS 캐시 목록을 오염시킬 수 있지만, DNS 응답을 가로채기 하여 Client가 위조된 DNS 정보를 이용하도록 만든다. 

:: 공격자는 암호화되지 않은 통신 간의 데이터를 임의로 조작하고 조작된 결과를 전달할 수 있다.

 

:: ARP Spoofing 공격이 선행되어야 한다.

--> 공격자는 게이트웨이와 Client의 MAC 주소를 공격자의 MAC 주소로 속인후, Client의 웹 서버 접속을 기다린다.

더보기

ARP Spoofing

 

:: 로컬 네트워크 (LAN)에서 사용하는 ARP 프로토콜의 허점을 이용하여 자신의 MAC(Media Access Control)주소를 다른 컴퓨터의 MAC인 것처럼 속이는 공격

:: ARP Cache 정보를 임의로 바꾼다고 하여 "ARP Cache Poisoning 공격"이라고도 불린다.

:: 단순히 패킷을 가로채어 훔쳐보는(Sniffing) 수준이 아니라, 가로챈 패킷을 변조한 후 전송하는 공격에도 사용되고 있다.

 

 

- Client가 URL을 이용하여 웹 서버에 접속할 때 자신의 DNS 캐시 목록에서 IP 주소를 찾지 못하면 UDP 프로토콜을 이용하여 로컬 DNS 서버에 웹 서버의 IP 주소를 요청한다.

 

- 이때 DNS 서버보다 가까이 있는 공격자는 DNS 응답 메시지를 먼저 보낼 수 있다.

따라서 Client는 먼저 수신된 위조된 DNS 응답 메시지를 신뢰하여 파밍사이트에 접속하게 되며, 공격자는 아이디와 패스워드와 같은 개인 정보를 중간에서 탈취한다.

 

더보기

UDP(User Datagram Protocol)

:: 전송 계층에서 사용하는 프로토콜로, 연결 설정과 해제 과정이 없는 비연결형 프로토콜

:: 오류 처리 및 패킷 순서 재조합과 같은 제어 기능이 없다

:: 단순히 데이터를 전송하고 수신한다.

:: 데이터의 신뢰성 검증이 필요없고, 데이터의 안전성 보다는 빠른 데이터 처리 및 빠른 전송이 요구되는 곳에 쓰인다.

 

UDP 소켓 통신

:: 서버와 클라이언트의 구분이 명확하지 않다.

(한 쪽이 sendto() 함수 호출로 데이터를 송신할 때 bind()로 특정 포트를 지정하지 않아도 데이터를 수신하는 시스템에서는 recvfrom() 함수의 인자를 통해 보낸 쪽의 IP와 포트 번호 확인이 가능한다.)

:: UDP는 송신자가 일방적으로 데이터를 전달하는 통신 프로토콜로, DNS 요청 과정에서 UDP 포트 53번을 사용한다.

 

DNS Spoofing


<첫 번째 실습>

※ 실습 환경 : 5.10.0-kali3-amd64, Windows 7 

첫 번째 실습

 

1. Target PC에게 ARP Spoofing을 수행한다.

 

-   arpspoof -i[사용할 인터페이스] -t [target이 될 대상의 IP주소] [속일 IP주소]

-   arpspoof -t 192.168.100.142 192.168.100.2 명령어 통해 Arp Spoofing을 수행

 

  Client(192.168.100.142)가 Gateway(192.168.100.2)로 통신을 할 때 이 정보가 Gateway로 가지 않고 Attacker PC에게로 이동하게 된다. Client에게 게이트웨이의 MAC 주소를 공격자의 MAC주소라고 계속해서 응답을 보낸다.

 

-   Attacker PC에서 응답 처리를 해주기 위해서 fragrouter -B1 명령어를 이용해 Client가 정상적으로 통신이 되게 설정한다. (B1 옵션 : 송수신 데이터 변조없이 데이터 그대로를 포워딩 해줌)

 

arpspoof 만을 이용하는 경우에는 희생자가 보내는 데이터들이 공격자로 넘어는 오지만, 공격자가 희생자가 원하는 서비스를 제공하지는 않으므로 응답이 가질 않게 되어 희생자 측에서 이상함을 눈치챌 수 있다.

 

하지만, arpspoof와 함께 fragrouter의 B1 옵션을 이용하게 되면 희생자는 정상적으로 통신이 되면서 희생자의 모든 패킷이 공격자를 통해가게 된다.

 

 

2.  Attacker PC에서 WebServer(apache2)를 실행한다.

 

-   Target PC가 Web브라우저를 통해 접속할 경우 자신이 설정한 웹 페이지를 보여주기 위해서 자신이 임의로 만든 웹 서버를 실행한다.

 

 

3.  Target PC에서 잘 동작하는지 확인

-   Client PC에서 Attacker PC IP 주소를 입력한 후 Attacker PC의 웹 페이지가 잘 접속되는지 확인한다.

 

 

 

4. Attacker PC에서 hosts 파일을 생성한다.

-   Target PC에서 Attacker PC가 원하는 주소를 입력할 때 자신의 사이트를 띄우기 위해 hosts 파일을 작성한다.

 

-   Client가 www.naver.com으로 접속할 경우 192.168.100.137로 이동하게 설정한다.  

 

 

5. Attacker PC에서 DNS Spoofing을 수행한다.

-   dnsspoof 명령어를 사용하여 www.naver.com에 대한 DNS Query 패킷이 위조된 웹 서버인 192.168.100.137로 이름이 해석되도록 설정한다

-   dnsspoof - i [인터페이스] -f [DNS 조회할 파일] 명령어를 입력해 53번 포트를 리스닝 상태로 만든다.

 

 

 

6. Target PC에서 잘 동작하는지 확인한다.

-   DNS 조회를 하기 이전에 이전 DNS 조회 기록을 지우기 위해서 ipconfig /flushdns 명령어를 입력한다.

(이전 기록들이 남아있을 수 있으므로)

 

 

 

공격 실패 시

-  공격이 성공한다면, hosts 파일에 설정한 주소를 입력했을 시 해당 사이트로 이동해야 한다. 

하지만 글쓴이 같은 경우 몇 번을 시도해도 DNS Spoofing 공격을 실패했다.

 

 

공격 성공 시 나오는 페이지

- 공격 성공 시  Client는 www.naver.com을 입력했지만 사이트는 공격자가 임의로 작성한 페이지에 접속이 된다. 

 

- Attacker PC에서 확인하면 Target PC에서 DNS 요청을 하는 것을 알 수 있다.

 



<두 번째 실습>

※ 실습 환경 : 5.10.0-kali3-amd64, Windows 7 

 

두 번째 실습

※ 두 번째 실습에선 DNS Spoofing 공격 결과를 확인하기 위해 마지막에 ping 명령어를 사용할 것이다.

 

 

▷ 실습을 위한 웹 서버 환경 구축 (피싱 사이트를 직접 구축하여 접속시키게 할 것이므로)

 

<Apache와 Tomcat 연동>

- 정적인 HTML, image, CSS 파일의 처리는 아파치가, 동적인  DB연동 및 JSP 파일 처리는 톰캣에 넘겨 효율적으로 이용할 수 있기 때문이다

localhost 접속 시

- 아파치 정상 설치 확인

 

localhost:8080 접속 시 

- 톰캣 정상 설치 확인

 

/etc/apache2/sites-enabled/000-default.conf 파일 설정

- 아파치와 톰캣을 연동하기 위한 커넥터를 설치하는 과정이다. 

 해당 파일에 JKMount /* ajp13_worker 구문을 추가한다.(적용할 톰캣의 URL 설정)

 

/etc/tomcat8/server.xml 파일 설정

- <Connector> 태그가 있는 부분의 주석을 제거해준다.

 

apache2와 tomcat9 연동 성공

- 설정 후 Apache & Tomcat 데몬을 재시작한 후 정상적으로 둘이 연동되었는지 확인한다.

 

 

1. 피싱 웹 서버 구축

웹서버 접속(http://localhost) 테스트

- 웹 서버 구축을 위해 Apache 웹 경로에 있는 기존 index.html 파일을 삭제한 후 원하는 대로 수정한다.

index.html 파일의 경로는 다음과 같다. /var/lib/tomcat8/webapps/ROOT/index.html 

그 후 localhost에 접속하면 위 그림처럼 뜬다.

 

 

2. 공격자 IP 확인 후, DNS 스푸핑 파일 설정

vi dnsspoof.hosts 후 cat 명령어를 통해 확인

- 왼쪽에는 공격자 IP를, 오른쪽에는 공격하고자 하는 사이트를 임의의 hosts 파일에 등록한다.

 

3. ARP 스푸핑과 패킷 릴레이

ARP Spoofing

- arpspoof 툴로 스푸핑 공격을 실행한다.

fragrouter 명령어 실행

- - Attacker PC에서 응답 처리를 해주기 위해서 fragrouter -B1 명령어를 이용해 Client가 정상적으로 통신이 되게 설정한다. (B1 옵션 : 송수신 데이터 변조없이 데이터 그대로를 포워딩 해줌)

# arpspoof 만을 이용하는 경우에는 희생자가 보내는 데이터들이 공격자로 넘어는 오지만, 공격자가 희생자가 원하는 서비스를 제공하지는 않으므로 응답이 가질 않게 되어 희생자 측에서 이상함을 눈치챌 수 있다.
# 하지만, arpspoof와 함께 fragrouter의 B1 옵션을 이용하게 되면 희생자는 정상적으로 통신이 되면서 희생자의 모든 패킷이 공격자를 통해가게 된다.

 

 

4. DNS 스푸핑 공격 수행

dnsspoof 명령어 실행

- 앞서 만들었던 hosts 파일을 참조해 dnsspoof 공격을 시작한다.

 

 

5. 공격이 성공되었는지 클라이언트에서 확인

공격 실패 시

- 위 사진과 같이 공격이 실패했을 경우에 클라이언트가 구글의 올바른 IP주소를 확인한다.

dns 정보 삭제

- 클라이언트의 cmd 창을 관리자모드로 실행한 후, DNS 정보를 삭제한다

ipconfig /flushdns 명령어를 사용한다.

 

공격 성공 시

- dns 스푸핑 공격이 성공하면 www.google.com에 ping 요청을 보냈지만 위 그림과 같이 공격자의 IP주소를 확인하고 있는 것을 알 수 있다. 

 

 


<DNS Spoofing 공격 차단 방법>

- 브라우저에 접속할 도메인을 입력하면 반드시 DNS Query가 발생하지는 않는다. 

1) 우선 이전에 같은 사이트에 접속한 적이 있는지 확인하기 위해 캐시에 해당 도메인에 대한 IP주소가 존재하는지 읽어본다. 
2) 만일 캐시에 IP가 존재하지 않는다면 
3) hosts 파일에 적혀진 도메인 이름에 대한 IP주소를 해석한다. 
→ 그렇기 때문에 중요한 사이트의 IP주소를 hosts 파일에 미리 적어두게 되면
DNS Query 없이 바로 hosts 파일에 적혀진 IP 주소로 접속하므로 DNS spoofing 공격을 방어할 수 있다

 

 

hosts 파일 설정

- Window7 에서 hosts 파일의 경로는 다음과 같다. 

C:\Windows\System32\drivers\etc 

 

wireshark로 확인

- 파이어폭스를 통해 www.google.com에 접속한 후 와이어샤크로 패킷을 확인해보면, hosts 파일에 저장한 IP로 통신이 발생하고 있음을 확인할 수 있다.  

 

 

 

'Project > Network' 카테고리의 다른 글

Hancitor Analysis by Wireshark (4)  (0) 2021.08.19
Hancitor Analysis by Wireshark (3)  (0) 2021.08.19
Hancitor Analysis by Wireshark (2)  (0) 2021.08.19
Hancitor Analysis by Wireshark (1)  (0) 2021.08.19

이미지 블러링(image blurring)

:: Image Blurring은 LPF를 이미지에 적용하여 얻을 수 있다. 고주파영역을 제거함으로써 노이즈를 제거하거나 경계선을 흐리게 하는 것이 목적. 

(LPF, HPF는 이전 글을 보면 설명이 되어있다.)

 

OpenCV에는 4가지 형태의 blurring 방법을 제공하고 있다.

1. Averaging
:: Box 형태의 커널을 이미지에 적용한 후 평균값을 box의 중심점에 적용

2. Median Filtering
:: 커널 윈도우와 픽셀의 값들을 정렬한 후에 중간값을 선택하여 적용
점 잡음(점처럼 찍힌 노이즈)을 제거하는데 효과적

3. Gaussian Filtering
:: Gaussian 함수를 이용한 커널을 적용
이미지의 전체적으로 밀도가 동일한 노이즈 , 백색노이즈를 제거하는데 가장 효과적

4. Bilateral Filtering
:: 양방향필터는 경계선을 유지하면서 Gaussian Blur 처리
Gaussian 필터를 적용하고 , 또 하나의 Gaussian 필터를 주변 픽셀까지 고려하여 적용하는 방식
경계면을 지키며 표면의 질감 등을 제거하는데 효과적

 

1. 평균 블러

:: 균일한 값을 가지는 커널을 이용한 이미지 필터링. 커널 영역내의 평균값으로 해당 픽셀을 대체

 

OpenCV에선 blur 함수로 구현되어 있다.

 

blur(src, ksize)

  • src: 원본 이미지
  • ksize: 커널 크기 (1보다 큰 홀수)

평균 블러 적용

 

2. 중앙값 블러

:: 평균이 아닌 중앙값으로 해당 픽셀을 대체.

kernel window와 pixel의 값들을 정렬한 후에 중간값을 선택하여 적용한다. 점 모양의 잡음을 제거하는 데 효과적이다.

OpenCV에서는 medianBlur 함수를 사용한다.

 

medianBlur(src, ksize)

  • src: 원본 이미지
  • ksize: 커널 크기 (1보다 큰 홀수)

중앙값 블러 적용한 이미지

 

3. 가우시안 블러

:: box filter는 동일한 값으로 구성된 kernel을 사용하지만, Gaussian Filter는 Gaussian함수를 이용한 Kernel을 적용

즉, kernel 행렬의 값을 Gaussian 함수를 통해서 수학적으로 생성하여 적용

 

OpenCV에서는 GaussianBlur로 구현되어 있다.

 

GaussianBlur(src, ksize, sigmaX)

  • src: 원본 이미지
  • ksize: 커널 크기(양수이면서 홀수)
  • sigmaX: 표준편차

백색노이즈가 있는 이미지를 가우시안 블러 처리

 

4. 양방향 필터링

:: 가우시안 필터링을 쓰면 이미지의 경계선도 흐려진다는 문제점이 있다. 따라서 경계선을 유지하면서 Gaussian 블러처리를 하는 것이 필요하다.

 

Gaussian 필터를 적용하고, 또 하나의 Gaussian 필터를 주변 pixel까지 고려하여 적용하는 방식이다.

OpenCV에서는 bilateralFilter 함수로 구현되어 있다.

 

bilateralFilter(src, d, sigmaColor, sigmaSpace)

  • src: 원본 이미지
  • d: 커널 크기
  • sigmaColor: 색공간 표준편차. 값이 크면 색이 많이 달라도 픽셀들이 서로 영향을 미친다.
  • sigmaSpace: 거리공간 표준편차. 값이 크면 멀리 떨어져있는 픽셀들이 서로 영향을 미친다.

 

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 필터링  (2) 2021.06.03
이미지 임계처리  (0) 2021.06.02
이미지 처리  (0) 2021.06.01

이미지 필터링(image filtering)

:: 필터(filter) 또는 커널(kernel) 또는 윈도우(window)라고 하는 정방행렬을 정의한 후 이 커널을 이동시키면서 같은 이미지 영역과 곱하여 그 결과값을 이미지의 해당 위치의 값으로 하는 새로운 이미지를 만드는 연산. 기호ⓧ를 사용

 

더보기

이미지도 주파수로 표현 가능

사물을 촬영할 때 사물과 배경의 사이 사물의 테두리 경계면이 고주파 영역이고, 일반적인 배경은 저주파이다.

 

LPF vs HPF

Low-Pass-Filter 저역 통과 필터 : 저주파만 통과시키는 필터

High-Pass-Filter 고역 통과 필터 : 고주파만 통과시키는 필터

 

LPF를 사용하면 고주파가 통과가 안되니 경계면이 유연해지거나 노이즈 제거, 블러 처리를 할 수 있고

HPF를 사용하면 이미지에서 경계선을 찾을 수 있다.

 

Kernel(커널)은 행렬을 의미하는데, 커널의 크기가 크면 이미지 전체가 blur 처리가 많이 된다. 

 

Filter 적용 방법

- 이미지의 픽셀 값의 중심으로부터 해당 커널 만큼의 영역을 평균하여 해당값을 커널값으로 나누고 이 값을 중심 픽셀값으로 취한다.

 

5x5 행렬

5x5 행렬에서. 이미지 중 하나의 픽셀을 지정한다고 하면, 그 픽셀을 중심으로 하는 5x5 범위의 모든 픽셀값을 더하고 그 값을 25로 나누고 나눈 값을 중심 픽셀값으로 정하는 것이다.

 

OpenCV는 cv2.filter2D()라는 함수를 이용해 이미지에 kernel(filter)를 적용하여 이미지 필터링이 가능하다.

이미지 픽셀 값을 해당 픽셀의 이웃과 평균하여 그 값을 취하는 averaging filter라고 한다.

 

filter2D(src, ddepth, kernel[, dst[, anchor[, delta[, borderType]]]])

  • src: 필터할 이미지
  • ddepth: 이미지 깊이(자료형 크기). 영상데이터를 저장하기 위해 사용되는 비트의 수. -1이면 소스이미지과 동일
  • kernel: 커널 행렬 (np.ones() 함수를 사용하여 행렬 생성 후 행렬 값으로 나눈 값이 포함)

+) np.ones(shape, dtype=None, order='C') : 지정된 shape의 배열을 생성하고 모든 요소를 1로 초기화. 

 

커널 사이즈에 따른 이미지 필터링 결과

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 임계처리  (0) 2021.06.02
이미지 처리  (0) 2021.06.01

 

thresholding은 임계점, 한계점, 문턱이라는 뜻. 반올림과 비슷한 느낌

사용자가 특정 수치값을 정해놓으면 그 기준값을 통해 값을 도출함

임계처리

- 임계처리(thresholding)는 이미지 행렬에서 하나의 픽셀값을 사용자가 지정한 기준값(threshold)를 사용하여 이진화(binarization)하는 가장 단순한 필터

 

- 이진화 처리란 영상을 흑/백으로 분류하여 처리하는 것

이때 기준이 되는 임계값을 어떻게 결정할 것인지가 중요한 문제

임계값보다 크면 백, 작으면 흑이 됨

기본 임계처리는 사용자가 고정된 임계값을 결정하고 그 결과를 보여주는 단순한 형태

 

OpenCV에서는 threshold라는 함수로 구현되어 있고 인수는 아래와 같다.

  • threshold(src, thresh, maxval, type)
    • src : 그레이스케일 이미지
    • thresh : 기준값
    • maxval : 기준값을 넘었을 때 적용할 최대값
    • type : 임계처리 유형
      • THRESH_BINARY : 기준값을 넘으면 최대값 아니면 0
      • THRESH_BINARY_INV : 기준값을 넘으면 0 아니면 최대값
      • THRESH_TRUNC : 기준값을 넘으면 기준값 아니면 최대값
      • THRESH_TOZERO : 기준값을 넘으면 원래값 아니면 0
      • THRESH_TOZERO_INV : 기준값을 넘으면 0 아니면 원래값

각 임계유형의 결과를 시각화해본다.

BINARY의 경우는 이미지 픽셀값이 다 255값을 가지게 되고, BINARY_INV의 경우는 그의 반대..

이런식으로 임계값을 이용하여 이미지 또는 영상을 처리할 수 있다.

 

적응임계처리

위의 결과를 보면 한가지 문제점이 있다. 임계값을 이미지 전체에 적용하여 처리하기 때문에 하나의 이미지에 음영이 다르면 일부 영역이 모두 흰색 또는 검정색으로 보여지게 되는 것이다.

 

이런 문제를 해결하기 위해서 이미지의 작은 영역별로 thresholding을 하면 된다.

OpenCV에서는 adaptiveThreshold 함수로 구현되어 있다.

 

  • adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
    • src : 그레이스케일 이미지
    • maxValue – 기준값을 넘었을 때 적용할 값
    • adaptiveMethod : 영역 내에서 기준값을 계산하는 방법
      • ADAPTIVE_THRESH_MEAN_C: 영역 내의 평균값에 C를 뺀 값을 기준값으로 사용
      • ADAPTIVE_THRESH_GAUSSIAN_C: 영역에 추후 설명할 가우시안 블러를 적용한 후 C를 뺀 값을 기준값으로 사용
    • thresholdType : 임계처리 유형
      • THRESH_BINARY
      • THRESH_BINARY_INV
    • blockSize : 임계처리를 적용할 영역의 크기
    • C : 평균이나 가중평균에서 차감할 값

 

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 필터링  (2) 2021.06.03
이미지 처리  (0) 2021.06.01

 

이미지 데이터를 표현하는 방식과 이미지 데이터를 처리하기 위한 파이썬 패키지 Pillow, Scikit-Image, OpenCV 패키지에 대해 알아본다.

 

픽셀

이미지 데이터는 픽셀(pixel)이라고 하는 작은 이미지를 직사각형 형태로 모은 것. 각 픽셀은 단색의 직사각형. 젠체 이미지의 크기를 표현할 때는 (세로픽셀수 x 가로픽셀수) 형식으로 표현

 

이미지 데이터를 저장할 때는 픽셀의 색을 표현하는 스칼라 값이나 벡터를 2차원 배열로 표현한다.

-> 파이썬에서는 NumPy의 ndarray 클래스 배열로 표현한다.

 

 

색공간

픽셀의 색을 숫자로 표현하는 방식을 색공간(color space)이라고 한다. 

대표적인 색공간 : 그레이스케일(gray scale), RGB(Red-Green-Blue), HSV(Hue-Saturation-Value)

 

그레이스케일

- 그레이스케일에서는 모든 색이 흑백.

- 각 픽셀은 명도를 나타내는 숫자로 표현된다.

- 0은 검은색을 나타내고 숫자가 커질수록 명도가 증가하여 하얀색이 된다.

- 숫자는 보통 0~255의 8비트 부호없는 정수로 저장된다.

 

SciPy 패키지의 misc 서브 패키지의 face 명령은 이미지 처리용 샘플 이미지를 제공한다.

인수로 gray=True를 입력하면 그레이스케일 이미지를 반환한다. 이미지의 크기는 배열의 shape 속성으로 볼 수 있다.

 

이 이미지 데이터는 768x1024 크기의 unit8 자료형 2차원 배열이다. 좌측 상단의 225개(15x15) 픽셀의 데이터를 보기 위해 아래와 같은 코드를 실행한다.

 

RGB

RGB 색공간에서 색은 적(Red), 녹(Green), 청(Blue)의 3가지 색의 명도를 뜻하는 숫자 3개가 합쳐진 벡터로 표현됨

8비트 부호없는 정수를 사용하는 경우 (255,0,0)은 빨간색, (0,255,0)은 녹색, (0.0.255)는 파란색

 

픽셀 데이터가 스칼라가 아닌 벡터이므로 이미지 데이터를 (세로픽셀수 x 가로픽셀수) 형태의 2차원 배열로 표현하지 못하고 (세로픽셀수 x 가로픽셀수 x 색채널) 형태의 3차원 배열로 저장 (세 번째 축을 색채널(channel)이라고 부름)

 

 

이미지 파일 형식

.bmp 확장자를 가지는 비트맵(bitmap) 파일은 지금까지 설명한 다차원 배열정보를 그대로 담고 있다.

하지만 비트맵 파일은 파일 용량이 크기 때문에 압축을 통해 용량을 줄인 JPG, GIF, PNG 등의 압축 파일 형식을 많이 사용한다.

 

- JPEG : Joint Picture Experts Group의 약자. 웹상 및 멀티미디어 환경에서 가장 널리 사용되고 있는 포맷. 

JPG라는 확장자도 같이 사용됨

 

- GIF : Graphics Interchange Format. 하나의 파일에 여러 비트맵을 저장하여 다중 프레임 애니메이션 구현

 

- PNG : Portable Network Graphics. GIF 포맷을 대체하기 위해 개발된 파일 포맷

문자 혹은 날카로운 경계가 있는 이미지인 경우 JPG보다 PNG가 효과적

 

 

Pillow를 이용한 이미지 처리

- Pillow는 이전에 사용되던 PIL(Python Imaging Library)패키지를 대체하기 위한 것.

- JPEG, BPM, GIF, PNG, PPM, TIFF 등의 다양한 포맷을 지원하고 초보자가 다루기 쉬움

- PIL 패키지의 대체이므로 임포트의 이름이 PIL 패키지와 같다는 점 주의

 

이미지 읽고 쓰기

 

Scikit-Image 

이 패키지도 이미지 처리에 많이 사용됨

 

OpenCV

- OpenCV(Open Source Computer Vision)은 이미지 처리, 컴퓨터 비전을 위한 라이브러리

- Windows, Linux, Mac OS, iOS, Android 등 다양한 플랫폼을 지원

- 실시간 이미지 프로세싱에 중점을 둔 라이브러리

 

- 2,500개가 넘는 알고리즘으로 구성되어 있음

 1. 영상 처리, 컴퓨터 비전, 기계 합습과 관려된 전통적인 알고리즘

 2. 얼굴 검출과 인식, 객체 인식, 객체 3D 모델 추출, 스테레오 카메라에서 3D 좌표 생성

 3. 고해상도 영상 생성을 위한 이미지 스티칭, 영상 검색, 적목 현상 제거, 안구 운동추적

 

 

 

 

참고 사이트

https://datascienceschool.net/03%20machine%20learning/03.02.02%20%EC%9D%B4%EB%AF%B8%EC%A7%80%20%ED%95%84%ED%84%B0%EB%A7%81.html

 

https://opencv-python.readthedocs.io/en/latest/doc/11.imageSmoothing/imageSmoothing.html

'Project > Image Handling' 카테고리의 다른 글

이미지 블러링  (0) 2021.06.03
이미지 필터링  (2) 2021.06.03
이미지 임계처리  (0) 2021.06.02

+ Recent posts