왜곡되지 않은 이미지에 대한 OpenCV의 다시 매핑 기능은 어떻게 작동합니까?

토르 스 해머

디버깅 목적으로 OpenCV의 리맵 기능을 다시 구현하려고했습니다. 보간을 고려하지 않고 다음과 같이 보일 것입니다.

for( int j = 0; j < height; j++ )
{
    for( int i = 0; i < width; i++ )
    {
        undistortedImage.at<double>(mapy.at<float>(j,i),mapx.at<float>(j,i)) = distortedImage.at<double>(j,i);
    }
}

이를 테스트하기 위해 다음 맵을 사용하여 y 축을 중심으로 이미지를 미러링했습니다.

int width = distortedImage.cols;
int height = distortedImage.rows;
cv::Mat mapx = Mat(height, width, CV_32FC1);
cv::Mat mapy = Mat(height, width, CV_32FC1);
for( int j = 0; j < height; j++)
{
    for( int i = 0; i < width; i++)
    {
        mapx.at<float>(j,i) = width - i - 1;
        mapy.at<float>(j,i) = j;
    }
}

그러나 보간은 정확히 다음과 같이 작동합니다.

cv::remap( distortedImage, undistortedImage, mapx, mapy, CV_INTER_LINEAR);

이제 이미지 왜곡을 없애기 위해 OCamCalib Toolbox만든지도에이 기능을 적용 해 보았습니다 . 이것은 기본적으로 OpenCV 왜곡 제거로 수행되는 작업과 동일합니다. 내 구현은 소스 이미지의 여러 픽셀이 대상 이미지의 동일한 픽셀에 매핑되는 것을 분명히 고려하지 않습니다. 그러나 더 나쁩니다. 실제로 내 소스 이미지가 대상 이미지에서 더 작은 버전으로 세 번 나타나는 것 같습니다. 그렇지 않으면 remap 명령이 완벽하게 작동합니다.

철저한 디버깅 후 저는 여러분에게 도움을 요청하기로 결정했습니다. 누구든지 내가 뭘 잘못하고 있는지 설명하거나 OpenCV에서 다시 매핑 구현에 대한 링크를 제공 할 수 있습니까?

토르 스 해머

나는 그것을 스스로 알아 냈다. 내 원래 구현에는 두 가지 근본적인 실수가 있습니다.

  1. 지도가 어떻게 사용되는지에 대한 오해.
  2. 강도 값을 추출하는 방법에 대한 오해.

올바르게 수행하는 방법 :

for( int j = 0; j < height; j++ )
{
    for( int i = 0; i < width; i++ )
    {
        undistortedImage.at<uchar>(mapy.at<float>(j,i),mapx.at<float>(j,i)) = distortedImage.at<uchar>(j,i);
    }
}

이제 이미지의 강도 값이 .at <double> 대신 .at <uchar>를 사용하여 추출된다는 점을 강조하고 싶습니다. 또한지도에 대한 색인이 전환됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

완전한 회전 x 각도 값은 asin 기능을 사용하여 반 회전에 매핑됩니다. 어떻게 다시 미러링합니까?

분류에서Dev

초기화되지 않은 개체에 액세스합니다. 이것이 어떻게 가능한지?

분류에서Dev

변수가 정의되지 않은 경우 C #에서 람다식이 어떻게 작동합니까?

분류에서Dev

'기능'에 대한 정의되지 않은 참조이지만 헤더가 포함되어 있습니다.

분류에서Dev

Wine은 시작 메뉴 항목에 대한 이미지 파일을 어떻게 생성합니까?

분류에서Dev

이 JPA 매핑은 정확히 어떻게 작동합니까?

분류에서Dev

이미지 처리 : 동일한 기능이 많은 템플릿 이미지에 스캔 이미지 매핑

분류에서Dev

NHibernate의 다 대일 매핑이 작동하지 않습니까?

분류에서Dev

pictureBox에서 이미지를 확대 / 축소했지만 이미지가 왜곡되지 않도록하려면 어떻게해야합니까?

분류에서Dev

2 개의 해시가 동일하지 않은 경우 해시 확인은 어떻게 작동합니까?

분류에서Dev

p5.js에서 왜곡되지 않은 2D Perlin 노이즈를 이미지로 얻으려면 어떻게해야합니까?

분류에서Dev

다시 시작한 후 일관되지 않은 Windows 10 DPI를 해결하려면 어떻게합니까?

분류에서Dev

Okular의 "텍스트 말하기"기능이 작동하지 않습니다. 작동 시키려면 어떻게해야합니까?

분류에서Dev

짧은 지연 후 키를 다른 키로 다시 매핑하려면 어떻게해야합니까?

분류에서Dev

nil : NilClass에 대한 정의되지 않은 메소드`[] '이지만 기사가 게시되었습니다.

분류에서Dev

휴대폰 용 메시지 녹음은 어떻게 작동합니까?

분류에서Dev

`/ etc / hosts`의 동일한 호스트에 대한 다른 IP : hostName 매핑. 왜 이것이 작동합니까?

분류에서Dev

아직 앱을 시작하지 않은 iCloud 사용자에 대한 정보를 어떻게 설정합니까?

분류에서Dev

xamarin의 SkiaSharp에서 크기가 조정 된 이미지에서 AspectFill이 작동하지 않습니다. 어떻게해야합니까?

분류에서Dev

두 요소의 이름은 동일하지만 기능이 다른 상황을 어떻게 처리합니까?

분류에서Dev

이미지를 동일한 크기로 만들고 왜곡되지 않습니다.

분류에서Dev

StoreStore 장벽은 x86의 지침에 어떻게 매핑됩니까?

분류에서Dev

파이썬에서`목록`에 대한 메모리 할당은 어떻게 작동합니까? 목록의 크기가 개체의 합계와 동일하지 않은 이유는 무엇입니까?

분류에서Dev

탐색 막대의 엄지 손가락에 이미지와 텍스트를 어떻게 그릴 수 있습니까? 슬라이드하는 동안 이미지와 값은 탐색 바의 엄지 손가락으로 첨부되어야합니다.

분류에서Dev

안전한 Rust에서 정의되지 않은 동작이 가능합니까?

분류에서Dev

Blazor의 js interop에 대한 정적 확장은 어떻게 작동합니까?

분류에서Dev

장고 뷰에서 장고의 페이지 매김은 어떻게 작동합니까?

분류에서Dev

파이썬의 양면 불평등은 어떻게 작동합니까? 그리고 왜 그것은 numpy 배열에서 작동하지 않습니까?

분류에서Dev

일시 중지 가능한 다운로드는 어떻게 작동합니까?

Related 관련 기사

  1. 1

    완전한 회전 x 각도 값은 asin 기능을 사용하여 반 회전에 매핑됩니다. 어떻게 다시 미러링합니까?

  2. 2

    초기화되지 않은 개체에 액세스합니다. 이것이 어떻게 가능한지?

  3. 3

    변수가 정의되지 않은 경우 C #에서 람다식이 어떻게 작동합니까?

  4. 4

    '기능'에 대한 정의되지 않은 참조이지만 헤더가 포함되어 있습니다.

  5. 5

    Wine은 시작 메뉴 항목에 대한 이미지 파일을 어떻게 생성합니까?

  6. 6

    이 JPA 매핑은 정확히 어떻게 작동합니까?

  7. 7

    이미지 처리 : 동일한 기능이 많은 템플릿 이미지에 스캔 이미지 매핑

  8. 8

    NHibernate의 다 대일 매핑이 작동하지 않습니까?

  9. 9

    pictureBox에서 이미지를 확대 / 축소했지만 이미지가 왜곡되지 않도록하려면 어떻게해야합니까?

  10. 10

    2 개의 해시가 동일하지 않은 경우 해시 확인은 어떻게 작동합니까?

  11. 11

    p5.js에서 왜곡되지 않은 2D Perlin 노이즈를 이미지로 얻으려면 어떻게해야합니까?

  12. 12

    다시 시작한 후 일관되지 않은 Windows 10 DPI를 해결하려면 어떻게합니까?

  13. 13

    Okular의 "텍스트 말하기"기능이 작동하지 않습니다. 작동 시키려면 어떻게해야합니까?

  14. 14

    짧은 지연 후 키를 다른 키로 다시 매핑하려면 어떻게해야합니까?

  15. 15

    nil : NilClass에 대한 정의되지 않은 메소드`[] '이지만 기사가 게시되었습니다.

  16. 16

    휴대폰 용 메시지 녹음은 어떻게 작동합니까?

  17. 17

    `/ etc / hosts`의 동일한 호스트에 대한 다른 IP : hostName 매핑. 왜 이것이 작동합니까?

  18. 18

    아직 앱을 시작하지 않은 iCloud 사용자에 대한 정보를 어떻게 설정합니까?

  19. 19

    xamarin의 SkiaSharp에서 크기가 조정 된 이미지에서 AspectFill이 작동하지 않습니다. 어떻게해야합니까?

  20. 20

    두 요소의 이름은 동일하지만 기능이 다른 상황을 어떻게 처리합니까?

  21. 21

    이미지를 동일한 크기로 만들고 왜곡되지 않습니다.

  22. 22

    StoreStore 장벽은 x86의 지침에 어떻게 매핑됩니까?

  23. 23

    파이썬에서`목록`에 대한 메모리 할당은 어떻게 작동합니까? 목록의 크기가 개체의 합계와 동일하지 않은 이유는 무엇입니까?

  24. 24

    탐색 막대의 엄지 손가락에 이미지와 텍스트를 어떻게 그릴 수 있습니까? 슬라이드하는 동안 이미지와 값은 탐색 바의 엄지 손가락으로 첨부되어야합니다.

  25. 25

    안전한 Rust에서 정의되지 않은 동작이 가능합니까?

  26. 26

    Blazor의 js interop에 대한 정적 확장은 어떻게 작동합니까?

  27. 27

    장고 뷰에서 장고의 페이지 매김은 어떻게 작동합니까?

  28. 28

    파이썬의 양면 불평등은 어떻게 작동합니까? 그리고 왜 그것은 numpy 배열에서 작동하지 않습니까?

  29. 29

    일시 중지 가능한 다운로드는 어떻게 작동합니까?

뜨겁다태그

보관