Various Developments6 [C# Numerical analysis Lib] Bisection Method 이분법(Bisection Method) 이분법은 수치해석에서 방정식의 근을 찾는 알고리즘 중 하나입니다. 이 알고리즘은 주어진 구간에서 함수 값의 부호가 서로 다른 두 점을 찾아서 그 중간 지점에서 함수값이 0에 가장 가까워지는 근을 찾아가는 방식으로 동작합니다. 알고리즘 순서 알고리즘 동작 순서는 다음과 같습니다. 주어진 구간 [a, b]에서 함수 f(x)의 값이 서로 다른 두 점을 찾습니다. 이를 위해 구간의 중앙값인 c를 구하고, f(a)와 f(c)의 부호가 다르면 [a, c]로 구간을 좁히고, f(c)와 f(b)의 부호가 다르면 [c, b]로 구간을 좁힙니다. 구간을 좁힌 후, 새로운 중앙값 c를 구합니다. 이 때, c = (a + b) / 2로 구할 수 있습니다. 새로운 중앙값 c에서 함수값 f.. 2023. 3. 5. [C# Numerical analysis Lib] 수치 해석 라이브러리 개발 개발에 들어가며... 과거 학부시절 수치해석을 공부하면서 사용했던 코드들이 전부 C나 C++로 구현되어 있었습니다. 당시에는 C#으로 개발된 라이브러리를 쉽게 구할 수 없었기 때문에 누군가가 집필한 참고 도서를 보면서 필요한 알고리즘을 직접 구현해야 했습니다. 그때 구현한 코드들은 플로피 디스크를 거쳐 지금은 외장하드에 고이 보관되어 있지만 활용을 안 하는 지금 사장시키기에는 아깝다는 생각이 들었습니다. 코드도 있고, 레퍼런스도 있고, 과거의 구현 경험도 있기때문에 이제는 C#으로 재탄생시켜 나만의 C# 라이브러리 목록에 추가해 보면 어떨까 하는 생각을 하게 되었습니다. 개인적인 생각이지만 자신만의 라이브러리를 만든다는 것은 매우 멋진 일이라고 생각합니다. 다양한 분야에서 사용되는 라이브러리를 만들다 보.. 2023. 3. 5. 3D Moire Scanner 개발 - 높이 맵(Height Map) 계산 이번 포스팅에서는 지난 시간 계산 했던 위상 맵에 이어 이를 활용한 최종 높이 맵을 계산하는 과정에 대해서 정리했습니다.위상 펼침(Phase Unwrapping) 지난 시간 계산했던 위상맵은 한 가지 문제점이 있습니다. 그것은 위상이 주기적으로 반복된다는 것입니다. 위상맵의 한 단면을 Profiling 해보면 다음과 같습니다.위상과 높이의 관계는 서로 비례 관계라서 위 위상처럼 주기적으로 나타나게 되면 높이 또한 주기적으로 변하는 모습을 갖게 됩니다. 따라서 이런 주기적인 위상들을 서로 이어서 주기성을 없애야 합니다. 이것을 위상펼침(Phase Unwrapping)이라고 합니다.개념은 매우 간단해 보이나 실제 적용 시에는 2D map의 노이즈와 주변 픽셀과의 관계들도 고려해야 하는 등 상당히 고급 알고리.. 2023. 2. 10. 3D Moire Scanner 개발 - 위상 맵(Phase Map) 계산 이번 포스팅에서는 전 포스팅에서 제작한 4-frame 이미지를 이용하여 실제 대상체에 투사하고 위상맵을 얻는 과정까지의 내용을 정리했습니다. [4-fram 이미지 제작 참조]2023.01.25 - [여러가지개발/3D Scanner] - 3D Scanner 개발 - sinusoidal 패턴 만들기 3D Scanner 개발 - sinusoidal 패턴 만들기앞서 정리한 알고리즘을 적용하기 위해서는 각 frame별 물체에 의해 왜곡된 패턴이미지가 필요합니다. 그러기 위해서는 projector에 넣어줄 이미지를 먼저 만들어야 합니다. 이미지는 opencv를 이용todamfather.tistory.com투사 이미지 획득 측정에 사용할 대상으로 100원짜리 동전을 선택했습니다. 이순신 장군님의 형상이 새겨진 모양에.. 2023. 2. 1. 3D Moire Scanner 개발 - sinusoidal 패턴 만들기 앞서 정리한 알고리즘을 적용하기 위해서는 각 frame별 물체에 의해 왜곡된 패턴이미지가 필요합니다. 그러기 위해서는 projector에 넣어줄 이미지를 먼저 만들어야 합니다. 이미지는 opencv를 이용하여 생성하였습니다.sinusoidal 패턴 수식 코딩하기 sinusoidal 패턴은 sin 또는 cos 어느 것을 선택해도 상관없습니다. 사용한 수식은 아래와 같습니다.위 수식을 C++을 이용해 함수로 바꾸어봤습니다.unsigned char GetCosineValue(const int& position, const int& wavelength_px, const int& shift_phase){ float val = 255.f * cos((2.f * PI / (float)wavelength_px) * p.. 2023. 1. 25. 3D Moire Scanner 개발 - 모아레(Moire) 현상을 이용한 3차원 형상 측정의 원리 개인 개발의 첫 프로젝트로 3D scanner의 핵심 알고리즘을 구현해 볼까 합니다. 3차원(3D) 측정 알고리즘에는 여러 가지가 있겠지만 산업현장에서 보편적으로 널리 쓰이는 모아레 알고리즘을 구현하는 목표로 이 프로젝트를 시작할까 합니다. 일단은 기본 원리를 알아야 하기에 자료조사(구글링)를 통해 공부한 내용을 먼저 정리했습니다. 모아레(Moire)의 개념 모아레(Moire)란 프랑스어로 고대 중국에서 수입한 비단의 물결무늬를 일컫는 말이라고 합니다. 비단을 짤 때 직조로 짜기때문에 가로/세로 격자 모양들이 서로 겹쳐지면 시각적으로 새로운 줄무늬가 보여서 이렇게 부른다고 합니다.. 이런 모아레 무늬는 간단한 실험으로 확인해볼 수 있습니다. 그림판이나 ppt를 열어서 격자나 다음과 같은 모양의 패턴.. 2023. 1. 18. 이전 1 다음