-
영상처리 & opencv
[opencv] 3개의 사진 Panorama(image stitching)
Panorama 구현 과정 1. Image stitching을 수행할 이미지들을 획득한 후 로드 한다. Grayscale로 변환해서 사용한다. 2. SURF 알고리즘을 사용하여 각 이미지의 특징점을 추출한 후 이미지들 간의 특징점을 비교하여 좋은 특징점들끼리 매칭시킨다. 3. 이미지들을 하나의 평면에 투영시키기 위해서 이미지 간의 변환관계(Homography)를 계산한다. 이때 모델 파라미터의 예측을 방해하는 대응점(Outlier)로부터 정확한 변환관계를 구축하기 위해 RANSAC 알고리즘을 사용한다. 4. 앞에서 계산한 Homography를 사용하여 이미지에 회전 변환을 적용하여 Image stitching을 실행한다. 주요 알고리즘 이론 : SURF, RANSAC, Homography 환경 : ope..
-
책
[책] 오베라는 남자
오베라는 남자 - 프레드릭 배크만, 2015 1. 사람들은 오베가 세상을 흑백으로 본다고 말했다. 하지만 그녀는 색깔이었다. 그녀는 오베가 볼 수 있는 색깔의 전부였다. 2. "모든 어둠을 쫓아버리는 데는 빛줄기 하나면 돼요" 언젠가 그가 어째서 늘 그렇게 명랑하게 살아가려 하느냐고 그녀에게 물었을 때, 그녀는 그렇게 말했다. 3. 세상 사람 모두가 그녀가 무엇을 위해 싸우는지 알아야 한다. 그게 사람들이 했던 얘기였다. 그녀는 선을 위해 싸웠다. 결코 가져본 적 없는 아이들을 위해 싸웠다. 그리고 오베는 그녀를 위해 싸웠다. 왜냐햐면 그녀를 위해 싸우는 것이야말로 그가 이 세상에서 제대로 아는 유일한 것이었으니까. 4. "누군가를 사랑하는 건 집에 들어가는 것과 같아요." 처음에는 새 물건들 전부와 사..
-
영상처리 & opencv
[javascript/python] colab에서 웹캠 실행하기
colab에서는 opencv에서 웹캠을 사용하는 cv2.VideoCapture(0) 코드가 동작하지 않는다. 저 코드는 기기에 연결된 장치를 불러오는 데 colab은 서버에 연결되어 있기 때문이다..! 따라서 www.it-swarm.dev/ko/python/google-colab%EC%97%90%EC%84%9C-cap-cv2videocapture-0-%EC%82%AC%EC%9A%A9-%EB%B0%A9%EB%B2%95/809606863/ 링크 안의 https://colab.research.google.com/notebooks/snippets/advanced_outputs.ipynb#scrollTo=2viqYx97hPMi 에서 Camera Capture부분의 코드를 사용하여 colab에서 웹캠을 실행해보았다..
-
알고리즘
[알고리즘] 3-Way inPlaceQuickSort - 네덜란드 국기 알고리즘
서론 quick sort quick sort는 기준 원소 pivot을 설정 후 기준 원소보다 작은 / 기준 원소와 같은 / 기준 원소보다 큰 리스트 3개로 분할하여 정렬한다. 따라서 입력 리스트의 모든 원소는 세 개의 부 리스트 중 하나에 삽입된다. inPlaceQuickSort quick sort는 제자리에서 수행되도록 구현이 가능하다. 입력 리스트의 원소를 재배치할 때 값을 삽입하는 대신 대체 작업을 수행한다. 대체란 입력 리스트 내에서 재배치되어야 할 원소들의 자리를 맞바꾸는 것이다. ※ 지금부터 설명하는 부분은 inPlaceQuickSort를 구현할 때 배열로 구현한다고 가정한다. 연결리스트에서는 쉽게 해결이 가능한 문제이기에 고민할 필요가 없었다. ※ quicksort를 진행할 때 분할 과정에 ..
-
영상처리 & opencv
[opencv] 직선 검출(Line Detection)
참고 출처 : https://076923.github.io/posts/Python-opencv-28/ https://opencv-python.readthedocs.io/en/latest/doc/25.imageHoughLineTransform/imageHoughLineTransform.html https://ko.wikipedia.org/wiki/%ED%97%88%ED%94%84_%EB%B3%80%ED%99%98 직선 검출 알고리즘: 허프 변환(Hough Transform)을 활용 (위 출처의 이론적인 설명이 자세하게 나와 있습니다 ) 위의 사진처럼 3개의 점에 대해서 원점에서 각 점까지의 거리를 𝜃, r로 표현할 수 있다. 이 곡선은 각 점(x, y)에 대해서 r=xsinθ+ycosθ을 만족한다. 허프 ..
-
임베디드 시스템
Jetson Nano Developer Kit 시작하기
developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit# 위의 링크를 보면서 차근차근 진행했다. microSD 카드에 이미지 쓰기 부분에서는 아래의 글에서 나온 오류가 발생하였고 해결했다. 이외에는 window버전으로 동일하게 진행하였다. jetson nano - balenaEtcher 오류 developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write Getting Started With Jetson Nano Developer Kit The NVIDIA® Jetson Nano™ Developer Kit is a small AI computer for makers, le....
photo
new
-
study [nvme-cli] command 추가 방식 nvme-builtin.h 구조와 command 추가 방식https://github.com/linux-nvme/nvme-cli/blob/master/nvme-builtin.h COMMAND_LIST( ENTRY("list", "List all NVMe devices and namespaces on machine", list) ENTRY("list-subsys", "List nvme subsystems", list_subsys) // ... (중략)); COMMAND_LIST와 ENTRY 매크로를 사용해서 명령어(command) 정의각 ENTRY는 명령어 이름, 설명, 그리고 실제로 실행될 함수명을 인자로 받음이 구조는 새로운 명령어를 추가할 때 ENTRY를 하나 더 추가하면 되도록 설계되.. -
CS [CS/책] 「오브젝트」6장 - 메시지와 인터페이스 책 「오브젝트」 6장 메시지와 인터페이스를 읽고 작성한 내용입니다.클래스라는 구현 도구에 지나치게 집착하면 경직되고 유연하지 못한 설계에 이를 확률이 높아진다.훌륭한 객체지향 코드를 얻기 위해서는 클래스가 아니라 객체를 지향해야 한다. 좀 더 정확하게 말해서 협력 안에서 객체가 수행하는 책임에 초점을 맞춰야 한다. 여기서 중요한 것은 책임이 객체가 수신할 수 있는 메시지의 기반이 된다는 것이다.애플리케이션은 클래스로 구성되지만 메시지를 통해 정의된다는 사실을 기억하라[Metz12].협력과 메시지클라이언트-서버 모델협력은 어떤 객체가 다른 객체에게 무언가를 요청할 때 시작된다[Wirfs-Brock03].협력 안에서 메시지를 전송하는 객체를 클라이언트, 메시지를 수신하는 객체를 서버라고 부른다. 협력은 클라..
-
CS [CS/책] 「오브젝트」5장 - 책임 할당하기 책 「오브젝트」 5장 책임 할당하기를 읽고 작성한 내용입니다. 데이터 중심 설계로 인해 발생하는 문제점을 해결할 수 있는 가장 기본적인 방법은 데이터가 아닌 책임에 초점을 맞추는 것이다. 책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다. 책임 할당 과정은 일종의 트레이드오프 활동이다. 동일한 문제를 해결할 수 있는 다양한 책임 할당 방법이 존재하며, 어떤 방법이 최선인지는 상황과 문맥에 따라 달라진다. 따라서 올바른 책임을 할당하기 위해서는 다양한 관점에서 설계를 평가할 수 있어야 한다. 실제 설계는 코드를 작성하는 동안 이뤄진다. 그리고 협력과 책임이 제대로 동작하는지 확인할 수 있는 유일한 방법은 코드를 작성하고 실행해 보..
-
CS [CS/책] 「오브젝트」4장 - 설계 품질과 트레이드오프 책 「오브젝트」 4장 설계 품질과 트레이드오프를 읽고 작성한 내용입니다. 객체지향 설계란 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다[Evers09]. 훌륭한 설계란 합리적인 비용 안에서 변경을 수용할 수 있는 구조를 만드는 것이다. 요즘 프로젝트를 진행하면서 설계는 매우 어렵다는 것을 깨닫고 있다. 4장을 읽으며 객체지향 설계를 데이터 중심으로 잘못하고 있다는 것을 한번 더 깨달았고, 의욕 넘치게 리팩토링을 시도해 보았으나.. 생각처럼 쉽지 않았다. 그래도 이번 기회에 문제라는 것을 상기하고 갈 수 있어서 좋았다. 데이터 중심 관점 객체의 상태는 구현에 속한다. 구현은 불안정하기 때문에 변하기 쉽다. 상태를 객체 분할의 중심축으로 삼으면 구현에 관..