문제

현재 데이터 포인트를 표시하는 OpenCV 및 QT를 사용하여 소프트웨어를 개발하고 있습니다. 불완전한 데이터에서 이미지를 채울 수 있어야합니다. 나는 내가 가진 포인트 사이를 보간하고 싶다. 누구나 도움이 될 수있는 라이브러리 나 기능을 추천 할 수 있습니까? 나는 OpenCV Remap 방법이라고 생각했지만 그것을 작동시킬 수없는 것 같습니다.

데이터는 강도 값의 2 차원 행렬입니다. 나는 어떤 종류의 이미지를 만들고 싶습니다. 학교 프로젝트.

도움이 되었습니까?

해결책

휴! 큰 주제.

"오른쪽"답변은 달라집니다 많이 문제 영역과 당신이하고있는 일에 대한 다양한 세부 사항에.

1 차원 이상을 보간하려면 일부 선택이 필요합니다. 나는 당신이 일반 그리드를 플로팅하고 있지만 일부 그리드 포인트에는 데이터가 없다고 가정 할 것입니다. 큰 질문 : 누락 된 포인트가 드물게 있습니까, 아니면 큰 멍청이를 만들까요?

캔트 정보를 추가하여 바라보다 확인.

개념적으로 간단한 제안 (그러나 구현은 일부 작업 일 수 있습니다) :

누락 된 데이터의 각 영역에 대해 모든 에지 지점을 식별하십시오. 그것은이 그림에서 X를 찾습니다

oooxxooo
oox..xoo 
oox...xo
ox..xxoo
oox.xooo
oooxoooo

. 이 블로브 주변의 가장자리 지점에 평균으로 각 누락 된 데이터 포인트를 채우십시오. 매끄럽게 만들기 위해 각 포인트의 무게 1/d 여기서 d는 두 지점 사이의 delta x + delta y)입니다.


세부 사항이 있기 전에 :

그런 종류의 정보가 없으면 선형 보간을 곧바로 시도해 보셨습니까? 귀하의 데이터가 합리적으로 밀집되면 이것은 당신을 위해 그것을 할 수 있으며, 필요할 때 인라인으로 코딩하는 것은 간단합니다.

다음 단계는 일반적으로 입방 스플라인이지만 기존 구현을 가져오고 싶을 것입니다.


빠른 선형 보간보다 더 강력한 것이 필요할 때 보통 사용합니다. 뿌리 (그리고 Tspline 클래스 중 하나를 선택하십시오) 그러나 이것은 필요한 것보다 더 많은 오버 헤드 일 수 있습니다.

주석에 언급 된 바와 같이, 루트는입니다 , 그리고 빠르지 만, 그것은 당신이 근본적인 방식으로 일을하도록 강요하려고 노력하므로 프로그램에 큰 영향을 줄 수 있습니다.


두 지점 (x1, y1)과 (x2, y2) 사이의 선형 보간 (또는 실제로 외삽)이 당신에게 제공합니다.

 y_i = (x_i-x1)*(y2-y1)/(x2-x1)

다른 팁

보간은 복잡한 주제입니다. 포인트 세트를 보간하는 방법에는 무한히 많은 방법이 있으며, 이것은 당신이 진정으로 보간을하고 싶고 어떤 종류의 부드럽게 부드럽게하지 않는다고 가정합니다. (보간은 원래 데이터 포인트를 정확하게 재현합니다.) 물론이 문제의 2 차원 특성은 상황을 더욱 어렵게 만듭니다.

2-D에서 산란 된 데이터의 보간을위한 몇 가지 공통 체계가 있습니다. 실제로 액세스 할 수있는 사람들에게는 매우 멋진 종이를 사용할 수 있습니다 (Richard Franke, "Scattered Data Interpolation : 일부 방법의 테스트", 계산 수학, 1982).

아마도 가장 일반적인 방법은 데이터의 삼각 측량을 기반으로합니다. 데이터 포인트에서 도메인의 삼각 측량 만 구축하십시오. 그런 다음 데이터의 볼록 선체 내부의 모든 지점은 삼각형 중 하나에 정확히 하나 내부에 있어야합니다. 그렇지 않으면 공유 가장자리에 있습니다. 이를 통해 삼각형 내부에서 선형으로 보간 할 수 있습니다. MATLAB을 사용하는 경우이 명시적인 목적으로 GridData 기능을 사용할 수 있습니다.)

산란 된 점에서 완전한 직사각형 이미지를 채우려고 할 때의 문제는 데이터가 배열의 4 모서리로 확장되지 않을 가능성이 높다는 것입니다. 이 경우, 배열의 모서리가 흩어진 지점의 볼록 선체 안에 놓지 않기 때문에 삼각 측량 기반 체계가 실패합니다. 그런 다음 대안은 "방사형 기본 함수"(종종 약식 RBF)를 사용하는 것입니다. Geostatistics 커뮤니티에서 사용할 때 Kriging을 포함하여 이러한 계획이 많이 있습니다.

http://en.wikipedia.org/wiki/kriging

마지막으로, 인 페인팅은 요소가 배열에 주어 지지만 요소가 누락 된 곳의 보간 체계의 이름입니다. 이름은 분명히 귀중한 예술 작품에서 눈물을 수리하거나 찢어 야하는 미술 관리자가 수행 한 것을 말합니다.

http://en.wikipedia.org/wiki/inpainting

입학 배후의 아이디어는 일반적으로 경계 값 문제를 공식화하는 것입니다. 즉, 구멍이있는 영역의 부분 미분 방정식을 정의하십시오. 알려진 경계 값을 사용하여 알려지지 않은 요소에 대한 PDE를 해결하여 구멍을 채우십시오. 알 수없는 요소가 많으면 계산 집중적 일 수 있습니다. 일반적으로 적어도 적어도 거대한 스파 스 시스템의 선형 방정식 시스템의 솔루션이 필요하기 때문입니다. PDE가 비선형 인 경우 아직 더 집중적 인 문제가됩니다. PDE에게 간단하고 합리적으로 좋은 선택은 라플라시아 인이며, 이로 인해 선형 시스템이 잘 추정됩니다. 다시, MATLAB 사용자를위한 솔루션을 제공 할 수 있습니다.

http://www.mathworks.com/matlabcentral/fileexchange/4551

PDE에 대한 더 나은 선택은 비선형 PDE에서 나올 수 있습니다. 일단 Navier/Stokes 방정식이됩니다. 일반적으로 볼 수있는 표면의 유형을 모델링하는 데 적합하지만 처리하기가 더 어렵습니다. 많은 생명 측면에서와 같이, 당신은 당신이 지불하는 것을 얻습니다.

이것이 간단한 학교 프로젝트라는 것을 고려할 때, 아마도 가장 쉬운 보간 기술은 "가장 가까운 이웃"입니다.

각 누락 된 데이터 포인트에 대해 가장 가까운 "채워진"데이터 포인트를 찾아 값으로 사용합니다.

소개를 조금 더 개선하려면 가장 가까운 데이터 포인트를 찾아 가중 평균을 누락 된 데이터 포인트의 값으로 사용한다고 말할 수 있습니다.

무게는 누락 된 데이터 포인트로부터 지점의 거리에 비례 할 수 있습니다.

Zillion 다른 기술이 있지만 가장 가까운 이웃은 아마도 가장 쉽게 구현하기가 쉽습니다.

내가 당신의 필요가 다음과 같다는 것을 이해한다면.

나는 당신이 x, y의 서브 세트, w에 의한 L의 치수에 대한 강도를 가지고 있다고 생각하며 0에서 l까지의 모든 x 및 y 범위의 모든 x를 채우고 싶다고 생각합니다.

이것이 귀하의 질문이라면 솔루션은 필터를 사용하여 다른 강도를 얻는 것입니다.

Bayer 필터 나 가우스 필터가 당신을 위해 일을 할 것이라고 생각합니다.

이 필터를 Google에서 구매할 수 있으며 구현에 대한 답변을 얻을 수 있습니다.

행운을 빌어 요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top