728x90

2020-07-28(화)

  • 지난 시간에는 컴퓨터 비전에 관하여 개요 적인 내용과 다양한 연산에 대해서 살펴보았습니다. 오늘은 이러한 기본 연산을 이용하여 영상 내부에 존재하는 에지와 선분 검출 방법, 지역 특징 등에 대해서 간단히 살펴보고, 이와 별개로 컴퓨터 해킹과 관련된 일부 내용과 바이너리 에디터를 이용한 부팅 가능 이미지 만드는 과정에 대해서 학습을 진행하였습니다.
  • 우선 지난번에 모폴로지 연산까지 학습한 데에 이어서 오늘은 에지 검출부터 시작하였습니다. 에지란 영상의 기울기가 급격히 변하는 부분으로 영상에 존재하는 모서리, 선과 같은 요소들이라 할수 있으며 영상의 미분을 통해 구할수 있습니다. 에지를 구하는데 있어 x와 y방향에 대한 기울기 영상, 그라디언트 벡터를 만들게 됩니다. 여기서 이러한 기울기 영상에 마스크를 적용하기도 하는데 로버츠 연산자, 프레윗 연산자, 그리고 가장 유명한 소벨 연산자가 존재합니다. 이러한 연산자와 더불어 가장 대중적으로 사용하는 에지 검출 방법로 캐니 에지가 있으며, 이전의 에지 연산자들이 영상 미분 마스크였다면 캐니 에지는 에지 영상을 검출하는대 최적화 방법을 사용하는것이 차이점이라 할수 있겠습니다. 이러한 다양한 에지들과 특성에 대해서 간단히 살펴보았습니다.
  • 다음으로는 이러한 에지를 이용한 선분 검출 알고리즘에 대해서 살펴보았습니다. 에지를 그대로 선분으로 사용할수 있지 않을까 생각되기도 하였으나 에지는 잡음의 영향을 크게 받으며, 에지가 경계 요소를 나타낸다 하더라도 중간에 끊어지는 등의 문제로 에지 자체를 선분으로 사용하기에는 어렵습니다. 그래서 이러한 에지 요소들을 이용해 선을 검출하는 대표적인 방법인 허프 변환과 ransac에 대해서 알아보았습니다. 허프 변환은 에지 영상에 존재하는 에지들을 극좌표계 상으로 표현하여 극좌표계상 에지들의 교점을 원래 y-x 평면에서의 선분 요소로 사용하는 방법이며, 번호판 검출이나 다양한 알고리즘에서 사용되고 있습니다. ransac의 경우 샘플 데이터로부터 노이즈의 영향을 제거한 가장 근사화된 모델을 구하는 알고리즘으로 아웃라이어가 존재하더라도 실제에 가까운 모델에 구하는 과정을 살펴보았습니다.
  • 영상처리중 가장 중요한 분야중 하나인 지역 특징에 대해서도 학습하였습니다. 지역 특징은 영상 내에 존재하는 물체간 매칭에 사용될 점이라고 할수 있으며, 영상의 크기인 스케일과 위치, 방향 특징 벡터 등으로 구성되어 있습니다. 지역 특징은 다른 특징들과 구분가능하며 다른 변형된 영상에서도 검출가능하며, 가려진 상황에서도 대처할수 있어야 하는 성질이 필요합니다. 이러한 지역 특징을 구하는 모라벡, 헤리스 코너 등의 알고리즘을 간단히 살펴보고 이러한 연산 과정에 필요한 그라디언트, 자코비안, 헤시안, 라플라시안 등에 대해서 학습을 진행하였습니다.
  • 컴퓨터 비전 분야의 학습은 여기까지 마무리하고 다음으로는 해킹 관련 분야에 대한 학습을 시작하였습니다. 컴퓨터를 다루면서 컴퓨터 구조에 대해서 간단하게는 이제 알게 되었으나 컴퓨터의 통신 방식이나 내부 동작과정에 있어서 아직 막연함이 컷습니다. 파일을 만져볼일이 없으니 파일의 구조가 정확하게 어떤지, 패킷을 다뤄보지 않으니 패킷이 어떤 정보로 실제로 이루어져있고 저에게는 막연한 영역이라 추루 임베디드 개발 등에 있어서 해킹 측면에서의 학습이 많은 도움이 될것 같아 이 분야에 대해서도 학습을 시작하였습니다.
  • 우선 해킹에 대해 다루면서 가장 먼저 해커와 크래커의 차이, 해커가 하는일, 그리고 해킹에 어떤것들이 있는지 살펴보았습니다. 저는 컴퓨터 소프트웨어에 웹 어플리케이션, 모바일, 임베디드 정도로만 분류할수 있었지 그 이상에 대해서는 잘 모르고 있었습니다. 컴퓨터 소프트웨어를 이와 유사한 관점에서 해킹의 종류들을 분류하였으며 각 분야의 해킹에 어떤 방식으로 취약점을 찾아 공격을 수행하는지 이전에 얼핏 듣기만 했던 공격 방식들에 대해서 조금 명확하게 파악할수 있었습니다. 그리고 내일부터 해킹에 대해서 제대로 살펴보기에 앞서 관련된 용어들을 정리하였습니다. 컴퓨터 구조부터 프로세스와 메모리, 프로토콜 등 개념과 구성들을 다시 반복하면서 어느 부분에 집중을 해야할지 이해하는데 많은 도움이 되었습니다.
  • 마지막으로 운영체제 개발 관련된 학습의 일환으로 바이너리 에디터로 부팅가능한 이미지 파일을 생성하였습니다. 해킹 공부를 시작한것과 비슷한 취지로 저는 바이너리와 실제 프로그래밍 영역에 대해서 아주 깊은 이해도를 가지고 있지는 않았습니다. 그나마 결과물을 만들었던 GUI나 웹 어플리케이션의 경우에도 예제 코드를 제가 원하는 방향대로 수정하고 기능을 추가시켜서 만들었지 소프트웨어 개발에서 어떠한 철학이나 확고한 생각을 가지고 구현한 것은 아니라 예제를 수정하는것 이상에 대한 개발 지식이 전무하다 싶었습니다. 그런 목표로 운영체제 개발하는 좋은 자료를 찾아 학습을 시작하였으며, 가장 기본적인 단계로 이전에 가끔 보던 핵스 덤프를 조작하는 바이너리 에디터로 어떻게 동작되는지는 잘 모르겠지만 순수한 기계어로 hello world를 출력하는 간단한 부팅 이미지를 만들어 가상화 머신 QEMU와 bochs 상에서 돌려보는 실습을 진행하였습니다. 기계어 부터 시작하여 어셈블리어, 실제 운영체제 기능을 하나하나씩 구현해나가다보면 운영체제에 대한 전반적인 이해도 뿐만 아니라 구조체 정의 방법과 컴퓨터 소프트웨어 설계 등 좋은 개발자가 되는데 한번 거쳐볼만한 과정인것 같았습니다.
300x250

'미분류' 카테고리의 다른 글

2020-07-30  (0) 2020.07.31
2020-07-29  (0) 2020.07.30
2020-07-27  (0) 2020.07.30
2020-07-26  (0) 2020.07.26
해킹 관련 커뮤니티 및 자료  (0) 2020.07.26

+ Recent posts