谷歌Android 4.3/4.4的PhotoSphere背后的算法

23

Android 4.3/4.4的相机应用程序在“全景模式”下可以将来自不同方向的照片拼接成一个非常优质的球形全景图。

结果展示:

我要做的是为iPad实现完全相同功能的应用程序。

我尝试了两种方法:

OpenCV 2.4.8

OpenCV 2.4.8提供了一个图像拼接流程,乍一看似乎很有前途。但是,它有两个问题:

  1. 该流程处理无序输入照片,据我所知,它仅使用图像特征匹配来定位照片之间的几何关系,并且当图像特征提取失败时(例如:白色墙壁,蓝天),该流程表现不佳。然而,iPad可以提供每个拍摄照片的任意空间方向数据(虽然有噪声),但我不知道如何在OpenCV拼接流程中利用这些数据。

  2. 我找不到一种方法来生成像PhotoSphere一样的180x360度全景图。使用所有方向的照片输入该流程只会产生带有弯曲图像边界的大型全景图。

PanoTools

我也尝试过PanoTools/Hugin库,虽然该库支持预定义的照片方向,但结果相当差且不稳定。此外,我尝试使用Focal(beta)应用程序在Google Play上,它的球形模式也基于PanoTools/Hugin,他们的结果(在球形模式下)似乎并不比我们的好。


我的问题:

  1. 是否有可以完成Google PhotoSphere相同功能的库?由于我不是为商业用途开发,因此任何开源库都可以接受。
  2. 是否有可用的良好算法(或技术报告、学者论文)?如果有,哪个是最好的?
  3. Google如何实现他们自己的PhotoSphere?有什么建议?

嗨,我正在寻找同样的问题。你有任何进展吗? - rodripf
你找到处理光球照片的东西了吗? - klimat
1
这里有一个给你的库:https://github.com/robbykraft/Panorama - Bart Burg
我使用Google相机时经常得到非常不稳定的结果,几乎总是有一些帧非常错位。我不认为它有什么独特的算法,尽管它有良好的UI,可以使用加速度计和指南针来确定何时拍照以及显示球形覆盖范围。 - kolen
有人找到解决办法了吗? - Nominalista
2个回答

3

我认为这个答案不是解决方案,而是进一步研究的资源。


为了对这个功能所涉及的算法有一个非常普遍的了解,我们可以研究负责此功能的共享对象(如果您喜欢Windows术语,则为DLL)。通过列出函数名称并在我们喜爱的搜索引擎中查找它们,我们可以得到几个有趣的结果:

本文的读者被鼓励查看下面的函数列表,并了解所提到的各种算法和转换。


以下是我获取此列表所遵循的步骤:
  1. 我找到了相机应用程序的一个端口到三星 [src]
  2. 在归档文件中,我注意到一个名为 libjni_mosaic.so 的文件,它(根据我的猜测)负责马赛克拼接(“照片球”)。
  3. 我列出了此文件中的函数(使用来自 Android NDKnmllvm_objdump更多信息):
         U acos
00006f6d T AddFrame
         U __aeabi_atexit
         U __aeabi_idiv
         U __aeabi_uidivmod
         U __aeabi_unwind_cpp_pr0
         U __aeabi_unwind_cpp_pr1
000326a0 B AffineWarpPoint_BL_LUT_x
00032888 B AffineWarpPoint_BL_LUT_y
000322d0 B AffineWarpPoint_NN_LUT_x
000324b8 B AffineWarpPoint_NN_LUT_y
00008939 T AllocateTextureMemory
         U __android_log_print
         U asin
00031008 D blendingType
00031138 A __bss_start
00031488 B buffer
00031478 B c
         U calloc
         U ceil
000073ad T ConvertYVUAiToPlanarYVU
         U cos
         U __cxa_finalize
         U __cxa_pure_virtual
000072b9 T decodeYUV444SP
00032a70 B __dso_handle
00031138 A _edata
00032a80 A _end
         U fclose
00007019 T Finalize
00030d88 D __FINI_ARRAY__
         U floor
         U fopen
         U fprintf
         U fread
         U free
00009589 T FreeTextureMemory
         U fscanf
         U fwrite
00031f40 B gBuffer
00031df0 B gBufferInput
00032048 B gBufferInputYVU
00031474 B gCancelComputation
00031d88 B gCenterOffsetX
00031d90 B gCenterOffsetY
00031e68 B gCurrentFBOIndex
00031fb8 B g_dAffinetrans
00032198 B g_dAffinetransGL
00031010 D g_dAffinetransIdentGL
00031948 B g_dAffinetransPan
00031ca8 B g_dAffinetransPanGL
000310e0 D g_dAffinetransRotation90GL
00031068 D g_dIdent3x3
00032250 B g_dTranslationToFBOCenter
00031900 B g_dTranslationToFBOCenterGL
00006e89 T GenerateQuarterResImagePlanar
         U gettimeofday
00031120 D g_iIndices
00031128 D g_iIndices2
00031130 D g_iIndices3
00031050 D gIsLandscapeOrientation
00031d30 B gK
00032078 B gKinv
00031f70 B gKm
00031d98 B gKminv
         U glActiveTexture
00031ce8 B gLastH1t
00031d80 B gLastTx
         U glAttachShader
         U glBindFramebuffer
         U glBindTexture
         U glCheckFramebufferStatus
         U glClear
         U glClearColor
         U glCompileShader
         U glCreateProgram
         U glCreateShader
         U glDeleteProgram
         U glDeleteShader
         U glDisable
         U glDrawElements
         U glEnableVertexAttribArray
         U glFramebufferTexture2D
         U glGenFramebuffers
         U glGenTextures
         U glGetAttribLocation
         U glGetError
         U glGetProgramInfoLog
         U glGetProgramiv
         U glGetShaderInfoLog
         U glGetShaderiv
         U glGetUniformLocation
         U glLinkProgram
         U glPixelStorei
         U glReadPixels
         U glShaderSource
         U glTexImage2D
         U glTexParameterf
         U glTexParameteri
         U glUniform1i
         U glUniformMatrix4fv
         U glUseProgram
         U glVertexAttribPointer
         U glViewport
00031aa0 B gPanOffset
0003100c D gPanViewfinder
000319cc B gPreview
00032038 B gPreviewFBOHeight
000319c8 B gPreviewFBOWidth
00032040 B gPreviewImage
00031de8 B gPreviewImageHeight
000318fc B gPreviewImage_semaphore
00031d78 B gPreviewImageWidth
00031890 B gProgress
00031090 D gRotation90
00031de0 B gSurfaceTextureID
00031aa8 B gSurfTexRenderer
00031e20 B gThisH1t
00031940 B gThisTx
000318b8 B gTRS
00031058 D gUILayoutScalingX
00031060 D gUILayoutScalingY
00031e6c B gWarper1
000320c0 B gWarper2
000310d8 D gWarpImage
000321d8 B gYVURenderer
000318e8 B height
000318f8 B high_res
00006d39 T Init
00030ca4 D __INIT_ARRAY__
00007201 T Java_com_android_camera_Mosaic_allocateMosaicMemory
00007809 T Java_com_android_camera_Mosaic_createMosaic
0000728d T Java_com_android_camera_Mosaic_freeMosaicMemory
000079b9 T Java_com_android_camera_Mosaic_getFinalMosaic
00007b1d T Java_com_android_camera_Mosaic_getFinalMosaicNV21
000095e1 T Java_com_android_camera_MosaicRenderer_init
00009bed T Java_com_android_camera_MosaicRenderer_preprocess
000097b9 T Java_com_android_camera_MosaicRenderer_reset
00009f81 T Java_com_android_camera_MosaicRenderer_setWarping
00009e1d T Java_com_android_camera_MosaicRenderer_step
00009c4d T Java_com_android_camera_MosaicRenderer_transferGPUtoCPU
0000a09d T Java_com_android_camera_MosaicRenderer_updateMatrix
000077b5 T Java_com_android_camera_Mosaic_reportProgress
00007779 T Java_com_android_camera_Mosaic_reset
00007761 T Java_com_android_camera_Mosaic_setBlendingType
000075ad T Java_com_android_camera_Mosaic_setSourceImage
000073dd T Java_com_android_camera_Mosaic_setSourceImageFromGPU
0000776d T Java_com_android_camera_Mosaic_setStripType
000095b9 T JNI_OnLoad
000095d5 T JNI_OnUnload
         U log
         U malloc
         U memcpy
         U memmove
         U memset
00031480 B mosaic
00031470 B mosaicHeight
00031898 B mosaicWidth
0002cbdc T __on_dlclose
         U pow
         U printf
         U putchar
         U puts
00031888 B quarter_res
000318b0 B resultBGR
000318a8 B resultYVU
         U sem_destroy
         U sem_init
         U sem_post
         U sem_wait
         U __sF
         U sin
         U sqrt
00031140 B stripType
000318a0 B tHeight
00031000 D thresh_still
00031150 B tImage
000318f0 B tWidth
00008129 T UpdateWarpTransformation
0002c545 T vp_cascade_motion
0002c7c1 T vp_copy_motion
0002c4f5 T vp_invert_motion
0002c7d1 T vp_motion_cornerdiff
0002caf1 T vp_zoom_motion2d
00031144 B width
000070e1 T YUV420toYVU24
00007169 T YUV420toYVU24_NEW
00028b09 T db_SolveCubic(double*, int*, double, double, double, double)
00023ef1 T db_CopyImage_u(unsigned char**, unsigned char const* const*, int, int, int)
00023ed9 T db_FreeImage_f(float**, int)
00023ed9 T db_FreeImage_u(unsigned char**, int)
0000a385 T normProjMat33d(double (*) [3])
00023d99 T db_AllocImage_f(int, int, int)
00023e41 T db_AllocImage_u(int, int, int)
00028e61 T db_SolveQuartic(double*, int*, double, double, double, double, double)
00019a79 T db_FillBuckets_f(float*, float const* const*, db_Bucket_f**, int, int, int, int, int, double const*, double const*, int)
00019bb5 T db_FillBuckets_u(short*, unsigned char const* const*, db_Bucket_u**, int, int, int, int, int, double const*, double const*, int, int, int)
000198b9 T db_FreeBuckets_f(db_Bucket_f**, int, int)
00019915 T db_FreeBuckets_u(db_Bucket_u**, int, int)
00007f1d T ClearPreviewImage(int)
00024491 T db_AlignPointer_f(float*, unsigned long)
00024491 T db_AlignPointer_s(short*, unsigned long)
000195b1 T db_AllocBuckets_f(int, int, int)
00019629 T db_AllocBuckets_u(int, int, int)
000241a1 T db_Approx3DCalMat(double*, double*, int, int, double, int)
0001b729 W db_EigenVector4x4(double*, double, double const*)
00019a49 T db_EmptyBuckets_f(db_Bucket_f**, int, int)
00019a49 T db_EmptyBuckets_u(db_Bucket_u**, int, int)
0001aa39 T db_MatchBuckets_f(db_Bucket_f**, db_Bucket_f**, int, int, unsigned long, unsigned long)
0001ac1d T db_MatchBuckets_u(db_Bucket_u**, db_Bucket_u**, int, int, unsigned long, unsigned long, int, bool, int)
00023f1d T db_WarpImageLut_u(unsigned char const* const*, unsigned char**, int, int, float const* const*, float const* const*, int)
00007ec9 T bindSurfaceTexture(unsigned int)
00007e45 T checkGLErrorDetail(char const*, int, char const*)
00007ff9 T continuePanningFBO(double)
00024a79 T db_CholeskyBacksub(double*, double const* const*, double const*, int, double const*)
00024341 T db_LeanQuickSelect(double const*, long, long, double*)
0001af7d T db_CollectMatches_f(db_Bucket_f**, int, int, unsigned long, int*, int*, int*)
0001af7d T db_CollectMatches_u(db_Bucket_u**, int, int, unsigned long, int*, int*, int*)
00013bb1 T db_HarrisStrength_f(float**, float const* const*, int, int, float*, int)
00014051 T db_HarrisStrength_u(float**, unsigned char const* const*, int, int, int*)
00024f7d T db_Orthogonalize6x7(double*, int)
000261e5 T db_Orthogonalize8x9(double*, int)
000245b1 T db_CholeskyDecomp6x6(double*, double*)
00024141 T db_PrintDoubleMatrix(double*, long, long)
00024105 T db_PrintDoubleVector(double*, long)
00018521 T AffineWarpPointOffset(float&, float&, double*, int, int)
00024c91 T db_CholeskyBacksub3x3(double*, double const*, double const*, double const*)
00024d55 T db_CholeskyBacksub6x6(double*, double const*, double const*, double const*)
000244a9 W db_OrthogonalizePair9(double*, double const*, double)
00021d81 T db_RobImageHomography(double*, double*, double*, int, double*, double*, double*, int*, int, db_stat_struct*, int, int, double, int, int, int, double*, double*, double*, double*, int*)
00016071 W db_ScalarProduct128_s(short const*, short const*)
000290d9 T db_SolveQuarticForced(double*, int*, double, double, double, double, double)
00007d39 T checkFramebufferStatus(char const*)
00013b99 T db_FreeStrengthImage_f(float*, float**, int)
00007f81 T ConvertAffine3x3toGL4x4(double*, double*)
00013a51 T db_AllocStrengthImage_f(float**, int, int)
000242ed T db_LeanPartitionOnPivot(double, double*, double const*, long, long, long*, long*)
00014c71 T db_MaxImage_Aligned16_f(float**, int, int, int, int)
000096f5 T calculateUILayoutScaling(int, int, bool)
0001e9b9 T db_RobCamRotation_Polish(double*, int, double*, double*, double, int, double)
0001d509 T db_StitchSimilarity2DRaw(double*, double*, double*, double**, double**, int, int, int, int, int)
0001bf21 T db_StitchSimilarity3DRaw(double*, double*, double*, double**, double**, int, int, int, int, int)
0001a259 T db_FillBucketsPrewarped_f(float*, float const* const*, db_Bucket_f**, int, int, int, int, int, double const*, double const*, int, double const*)
0001a405 T db_FillBucketsPrewarped_u(short*, unsigned char const* const*, db_Bucket_u**, int, int, int, int, int, double const*, double const*, int, double const*)
00023c69 T db_SetupImageReferences_f(float*, int, int)
00023d09 T db_SetupImageReferences_u(unsigned char*, int, int)
0001cac1 T db_StitchAffine2D_3Points(double*, double*, double*, double*, double*, double*, double*)
00015139 T db_ExtractCornersSaturated(float**, int, int, int, int, int, int, unsigned long, float, double*, double*, double*, int*)
0001db19 W db_RobImageHomography_Cost(double*, int, double*, double*, double)
00027ea1 T db_NullVectorOrthonormal6x7(double*, double const*)
00028369 T db_NullVectorOrthonormal8x9(double*, double const*)
0001c2d9 T db_StitchProjective2D_4Points(double*, double*, double*, double*, double*, double*, double*, double*, double*)
00016b3d W db_ScalarProduct128Aligned16_f(float const*, float const*)
0001a5c9 T db_FillBucketsPrewarpedAffine_u(short*, unsigned char const* const*, db_Bucket_u**, int, int, int, int, int, double const*, double const*, int, double const*, double const*, int const*, int)
0001e061 W db_RobImageHomography_Jacobians(double*, double*, double*, int, double*, double*, double)
0001bbb9 W db_RotationFromMOuterProductSum(double*, double*, double*)
0001f169 T db_RobCamRotation_Polish_Generic(double*, int, int, double*, double*, double, int, double)
00024971 T db_CholeskyDecompSeparateDiagonal(double**, double*, int)
00024b5d T db_CholeskyDecomp3x3SeparateDiagonal(double*, double*)
00014e9d T db_MaxSuppressFilter_5x5_Aligned16_f(float**, float**, int, int, int, int, float*)
00018905 W db_SignedSquareNormCorr11x11_PreAlign_f(float*, float const* const*, int, int, float*, float*)
00017831 W db_SignedSquareNormCorr11x11_PreAlign_u(short*, unsigned char const* const*, int, int, float*, float*)
00018699 T db_SignedSquareNormCorr5x5Aligned_Post_s(short const*, short const*, float, float)
00018651 T db_SignedSquareNormCorr11x11Aligned_Post_s(short const*, short const*, float, float)
00018565 T db_SignedSquareNormCorr21x21Aligned_Post_s(short const*, short const*, float, float)
0001cf89 T db_StitchRotationCommonFocalLength_3Points(double*, double*, double*, double*, double*, double*, double*, double*, int)
0000a409 T det33d(double const (*) [3])
0000a459 T inv33d(double const (*) [3], double (*) [3])
000242d1 T db_Zero(double*, long)
0000a249 T mult33d(double (*) [3], double (*) [3], double (*) [3])
         U operator delete[](void*)
         U operator delete(void*)
000105cd T ImageUtils::allocateImage(int, int, int, short)
00010451 T ImageUtils::readBinaryPPM(char const*, int&, int&)
00010525 T ImageUtils::writeBinaryPPM(unsigned char*, char const*, int, int, int)
00010151 T ImageUtils::imageTypeToRowPointers(unsigned char*, int, int)
0000ff09 T ImageUtils::rgb2yvu(unsigned char*, unsigned char*, int, int)
00010319 T ImageUtils::yvu2bgr(unsigned char*, unsigned char*, int, int)
000101e1 T ImageUtils::yvu2rgb(unsigned char*, unsigned char*, int, int)
00010019 T ImageUtils::rgb2gray(unsigned char*, int, int)
000100c1 T ImageUtils::rgb2gray(unsigned char*, unsigned char*, int, int)
0000fe09 T ImageUtils::rgba2yvu(unsigned char*, unsigned char*, int, int)
000105e1 T ImageUtils::freeImage(unsigned char*)
000123e1 T FrameBuffer::CreateBuffers()
0001226d T FrameBuffer::InitializeGLContext()
000122ad T FrameBuffer::Init(int, int, unsigned int)
00012255 T FrameBuffer::Reset()
00012231 T FrameBuffer::FrameBuffer()
00012231 T FrameBuffer::FrameBuffer()
00012219 T FrameBuffer::~FrameBuffer()
00012209 T FrameBuffer::~FrameBuffer()
00012209 T FrameBuffer::~FrameBuffer()
00012129 T YVURenderer::DrawTexture()
00012035 T YVURenderer::InitializeGLProgram()
00012111 T YVURenderer::YVURenderer()
00012111 T YVURenderer::YVURenderer()
000120f1 T YVURenderer::~YVURenderer()
000120d9 T YVURenderer::~YVURenderer()
000120d9 T YVURenderer::~YVURenderer()
0001b449 T db_Matcher_f::Init(int, int, double, int)
0001b40d T db_Matcher_f::Clean()
0001b5a1 T db_Matcher_f::Match(float const* const*, float const* const*, double const*, double const*, int, double const*, double const*, int, int*, int*, int*, double const*)
0001b3c1 T db_Matcher_f::db_Matcher_f()
0001b3c1 T db_Matcher_f::db_Matcher_f()
0001b3cd T db_Matcher_f::~db_Matcher_f()
0001b3cd T db_Matcher_f::~db_Matcher_f()
0001b71d T db_Matcher_u::IsAllocated()
000196a1 T db_Matcher_u::Init(int, int, double, int, double, bool, int)
00019971 T db_Matcher_u::Clean()
0001b019 T db_Matcher_u::Match(unsigned char const* const*, unsigned char const* const*, double const*, double const*, int, double const*, double const*, int, int*, int*, int*, double const*, int)
0001b6e5 T db_Matcher_u::operator=(db_Matcher_u const&)
0001b6a1 T db_Matcher_u::db_Matcher_u(db_Matcher_u const&)
0001b675 T db_Matcher_u::db_Matcher_u()
0001b6a1 T db_Matcher_u::db_Matcher_u(db_Matcher_u const&)
0001b675 T db_Matcher_u::db_Matcher_u()
00019a01 T db_Matcher_u::~db_Matcher_u()
000199b1 T db_Matcher_u::~db_Matcher_u()
000199b1 T db_Matcher_u::~db_Matcher_u()
00010c51 T PyramidShort::calcStorage(unsigned short, unsigned short, unsigned short, int, int*)
0001113d T PyramidShort::BorderExpand(PyramidShort*, int, int)
00011529 T PyramidShort::BorderReduce(PyramidShort*, int)
00010c89 T PyramidShort::BorderSpread(PyramidShort*, int, int, int, int)
00010be5 T PyramidShort::allocateImage(unsigned short, unsigned short, unsigned short)
00010d89 T PyramidShort::BorderExpandOdd(PyramidShort*, PyramidShort*, PyramidShort*, int)
000111cd T PyramidShort::BorderReduceOdd(PyramidShort*, PyramidShort*, PyramidShort*)
00010b25 T PyramidShort::allocatePyramidPacked(unsigned short, unsigned short, unsigned short, unsigned short)
00010c49 T PyramidShort::freeImage(PyramidShort*)
00011b71 T WarpRenderer::DrawTexture(float*)
00011af1 T WarpRenderer::SetScalingMatrix(float, float)
00011a39 T WarpRenderer::SetViewportMatrix(int, int, int, int)
0001190d T WarpRenderer::InitializeGLProgram()
00011a21 T WarpRenderer::WarpRenderer()
00011a21 T WarpRenderer::WarpRenderer()
00011a01 T WarpRenderer::~WarpRenderer()
000119e9 T WarpRenderer::~WarpRenderer()
000119e9 T WarpRenderer::~WarpRenderer()
00015781 T db_CornerDetector_f::Init(int, int, int, int, int, double, double)
0001574d T db_CornerDetector_f::Clean()
000158b9 T db_CornerDetector_f::Start(int, int, int, int, unsigned long, double, double, int)
00015709 T db_CornerDetector_f::db_CornerDetector_f()
00015709 T db_CornerDetector_f::db_CornerDetector_f()
00015715 T db_CornerDetector_f::~db_CornerDetector_f()
00015715 T db_CornerDetector_f::~db_CornerDetector_f()
00013a0d T db_CornerDetector_u::ExtractCorners(float**, double*, double*, int*)
00015f31 T db_CornerDetector_u::Init(int, int, int, int, int, double, double)
00012645 T db_CornerDetector_u::Clean()
00015ea9 T db_CornerDetector_u::Start(int, int, int, int, unsigned long, double, double)
00015ff1 T db_CornerDetector_u::operator=(db_CornerDetector_u const&)
0001602d T db_CornerDetector_u::db_CornerDetector_u(db_CornerDetector_u const&)
00015e91 T db_CornerDetector_u::db_CornerDetector_u()
0001602d T db_CornerDetector_u::db_CornerDetector_u(db_CornerDetector_u const&)
00015e91 T db_CornerDetector_u::db_CornerDetector_u()
0001267d T db_CornerDetector_u::~db_CornerDetector_u()
000126c9 T db_CornerDetector_u::~db_CornerDetector_u()
000126c9 T db_CornerDetector_u::~db_CornerDetector_u()
00011f39 T SurfaceTextureRenderer::DrawTexture(float*)
00011f31 T SurfaceTextureRenderer::SetSTMatrix(float*)
00011eb1 T SurfaceTextureRenderer::SetScalingMatrix(float, float)
00011df9 T SurfaceTextureRenderer::SetViewportMatrix(int, int, int, int)
00011c9d T SurfaceTextureRenderer::InitializeGLProgram()
00011dc1 T SurfaceTextureRenderer::SurfaceTextureRenderer()
00011dc1 T SurfaceTextureRenderer::SurfaceTextureRenderer()
00011da1 T SurfaceTextureRenderer::~SurfaceTextureRenderer()
00011d89 T SurfaceTextureRenderer::~SurfaceTextureRenderer()
00011d89 T SurfaceTextureRenderer::~SurfaceTextureRenderer()
0002b4f1 T db_StabilizationSmoother::smoothMotion(VP_MOTION*, VP_MOTION*)
0002b6f9 T db_StabilizationSmoother::smoothMotion(VP_MOTION*, VP_MOTION*, double)
0002bcf1 T db_StabilizationSmoother::smoothMotion1(VP_MOTION*, VP_MOTION*, VP_MOTION*, VP_MOTION*, double)
0002be8d T db_StabilizationSmoother::is_point_in_rect(double, double, double, double, double, double)
0002b8b1 T db_StabilizationSmoother::smoothMotionAdaptive(int, int, VP_MOTION*, VP_MOTION*)
0002aa45 T db_StabilizationSmoother::Init()
0002b4e5 T db_StabilizationSmoother::db_StabilizationSmoother()
0002b4e5 T db_StabilizationSmoother::db_StabilizationSmoother()
0000ecb9 T db_StabilizationSmoother::~db_StabilizationSmoother()
0000ecb9 T db_StabilizationSmoother::~db_StabilizationSmoother()
0002a1d9 T db_FrameToReferenceRegistration::SmoothMotion()
00029c89 T db_FrameToReferenceRegistration::ComputeInliers(double*)
00029f09 T db_FrameToReferenceRegistration::SelectOutliers()
0002a479 T db_FrameToReferenceRegistration::UpdateReference(unsigned char const* const*, bool, bool)
00029efd T db_FrameToReferenceRegistration::ComputeCostArray()
0002991d T db_FrameToReferenceRegistration::Get_H_dref_to_ins(double*)
000298d1 T db_FrameToReferenceRegistration::Get_H_dref_to_ref(double*)
00029a89 T db_FrameToReferenceRegistration::Set_H_dref_to_ins(double*)
00029c51 T db_FrameToReferenceRegistration::NeedReferenceUpdate()
0002a141 T db_FrameToReferenceRegistration::SetOutlierThreshold()
0002a071 T db_FrameToReferenceRegistration::ComputeCostHistogram()
00029c19 T db_FrameToReferenceRegistration::ResetDisplayReference()
00029f9d T db_FrameToReferenceRegistration::EstimateSecondaryModel(double*)
0002a379 T db_FrameToReferenceRegistration::GenerateQuarterResImage(unsigned char const* const*)
00029669 T db_FrameToReferenceRegistration::Init(int, int, int, int, bool, bool, double, unsigned int, bool, double, int, int, int, double, bool, int, int)
00029539 T db_FrameToReferenceRegistration::Clean()
00029ce5 T db_FrameToReferenceRegistration::Polish(int*, int&)
0002a62d T db_FrameToReferenceRegistration::AddFrame(unsigned char const* const*, double*, bool, bool)
00029425 T db_FrameToReferenceRegistration::db_FrameToReferenceRegistration()
00029425 T db_FrameToReferenceRegistration::db_FrameToReferenceRegistration()
00029641 T db_FrameToReferenceRegistration::~db_FrameToReferenceRegistration()
00029641 T db_FrameToReferenceRegistration::~db_FrameToReferenceRegistration()
0000ab05 T Align::getLastTRS(double (*) [3])
0000a619 T Align::initialize(int, int, bool, float)
0000aae1 T Align::addFrameRGB(unsigned char*)
0000a611 T Align::getRegProfileString()
0000a7b1 T Align::addFrame(unsigned char*)
0000a545 T Align::Align()
0000a545 T Align::Align()
0000a5f9 T Align::~Align()
0000a5f9 T Align::~Align()
0000ac6d T Blend::initialize(int, int, int, int)
0000b301 T Blend::ComputeMask(CSite*, BlendRect&, BlendRect&, MosaicRect&, YUVinfo&, int)
0000c429 T Blend::ClipBlendRect(CSite*, BlendRect&)
0000c2a1 T Blend::FrameToMosaic(double (*) [3], double, double, double&, double&)
0000b54d T Blend::MosaicToFrame(double (*) [3], double, double, double&, double&)
0000af4d T Blend::CropFinalMosaic(YUVinfo&, MosaicRect&)
0000c5d9 T Blend::DoMergeAndBlend(MosaicFrame**, int, int, int, YUVinfo&, MosaicRect&, MosaicRect&, float&, bool&)
0000ad71 T Blend::MosaicSizeCheck(float, float)
0000ae05 T Blend::FillFramePyramid(MosaicFrame*)
0000ca39 T Blend::FrameToMosaicRect(int, int, double (*) [3], BlendRect&)
0000ad25 T Blend::AlignToMiddleFrame(MosaicFrame**, int)
0000affd T Blend::PerformFinalBlending(YUVinfo&, MosaicRect&)
0000cc81 T Blend::SelectRelevantFrames(MosaicFrame**, int, MosaicFrame**, int&)
0000e181 T Blend::ComputeBlendParameters(MosaicFrame**, int, int)
0000b6a9 T Blend::ProcessPyramidForThisFrame(CSite*, BlendRect&, BlendRect&, MosaicRect&, YUVinfo&, double (*) [3], int)
0000b2dd T Blend::RoundingCroppingSizeToMultipleOf8(MosaicRect&)
0000ce01 T Blend::runBlend(MosaicFrame**, MosaicFrame**, int, unsigned char*&, int&, int&, float&, bool&)
0000ac2d T Blend::Blend()
0000ac2d T Blend::Blend()
0000ac45 T Blend::~Blend()
0000ac45 T Blend::~Blend()
000107a1 T Mosaic::initialize(int, int, int, int, int, bool, float)
0001098d T Mosaic::addFrameRGB(unsigned char*)
00010ac1 T Mosaic::createMosaic(float&, bool&)
000109f1 T Mosaic::balanceRotations()
000108ed T Mosaic::addFrame(unsigned char*)
000109d9 T Mosaic::getMosaic(int&, int&)
000106e9 T Mosaic::Mosaic()
000106e9 T Mosaic::Mosaic()
00010721 T Mosaic::~Mosaic()
00010721 T Mosaic::~Mosaic()
000105e5 T YUVinfo::allocateImage(unsigned short, unsigned short)
00010695 T YUVinfo::mapYUVInfoToImage(YUVinfo*, unsigned char*)
000115fd T Renderer::loadShader(unsigned int, char const*)
00011691 T Renderer::createProgram(char const*, char const*)
00011791 T Renderer::SetupGraphics(int, int)
000117fd T Renderer::SetupGraphics(FrameBuffer*)
000118d5 T Renderer::GetTextureName()
000118b1 T Renderer::InitializeGLContext()
000118d9 T Renderer::SetInputTextureName(unsigned int)
000118dd T Renderer::SetInputTextureType(unsigned int)
000118e1 T Renderer::SetInputTextureDimensions(int, int)
00011879 T Renderer::Clear(float, float, float, float)
000115b9 T Renderer::Renderer()
000115b9 T Renderer::Renderer()
000115a1 T Renderer::~Renderer()
00011591 T Renderer::~Renderer()
00011591 T Renderer::~Renderer()
0000ee45 T CDelaunay::deleteEdge(short)
0000eef9 T CDelaunay::freeMemory()
0000eec1 T CDelaunay::allocMemory(int)
0000ed81 T CDelaunay::connectLeft(short, short)
0000fd59 T CDelaunay::triangulate(SEdgeVector**, int, int, int)
0000ede5 T CDelaunay::connectRight(short, short)
0000fc41 T CDelaunay::constructList(short, int, int)
0000fd91 T CDelaunay::linkNeighbors(SEdgeVector*, int, int)
0000ef0d T CDelaunay::deleteAllEdges()
0000ef49 T CDelaunay::consolidateEdges()
0000faf1 T CDelaunay::buildTriangulation(int)
0000f4d9 T CDelaunay::ccw(short, short, short)
0000f8cd T CDelaunay::build(int, int, short*, short*, int)
0000e771 T CDelaunay::cmpev(int, int)
0000e7e9 T CDelaunay::copyev(int, int)
0000e7fd T CDelaunay::copysp(int, int)
0000ed2d T CDelaunay::splice(short, short)
0000e7c1 T CDelaunay::swapev(int, int)
0000e781 T CDelaunay::swapsp(int, int)
0000e8b1 T CDelaunay::xcmpsp(int, int)
0000e825 T CDelaunay::ycmpsp(int, int)
0000f529 T CDelaunay::doMerge(short*, short, short, short*)
0000f0fd T CDelaunay::rcssort(int, int, int, int (CDelaunay::*)(int, int), void (CDelaunay::*)(int, int), void (CDelaunay::*)(int, int))
0000f035 T CDelaunay::spsortx(short*, int, int)
0000f099 T CDelaunay::spsorty(short*, int, int)
0000ef39 T CDelaunay::freeEdge(short)
0000f439 T CDelaunay::incircle(short, short, short, short)
0000ecbd T CDelaunay::makeEdge(short, short)
0000ef19 T CDelaunay::allocEdge()
0000ecb9 T CDelaunay::CDelaunay()
0000ecb9 T CDelaunay::CDelaunay()
0000ecb9 T CDelaunay::~CDelaunay()
0000ecb9 T CDelaunay::~CDelaunay()
         U operator new[](unsigned int)
000118d5 T FrameBuffer::GetTextureName() const
00012411 T FrameBuffer::GetFrameBufferName() const
00012419 T FrameBuffer::GetWidth() const
00012415 T FrameBuffer::GetFormat() const
0001241d T FrameBuffer::GetHeight() const
0001201d T YVURenderer::VertexShaderSource() const
00012029 T YVURenderer::FragmentShaderSource() const
000118f5 T WarpRenderer::VertexShaderSource() const
00011901 T WarpRenderer::FragmentShaderSource() const
00015971 T db_CornerDetector_f::DetectCorners(float const* const*, double*, double*, int*) const
00012cc5 T db_CornerDetector_u::DetectCorners(unsigned char const* const*, double*, double*, int*, unsigned char const* const*, unsigned char) const
00011c85 T SurfaceTextureRenderer::VertexShaderSource() const
00011c91 T SurfaceTextureRenderer::FragmentShaderSource() const
         U operator new(unsigned int)
00030d30 D vtable for FrameBuffer
00030d10 D vtable for YVURenderer
00030d68 D vtable for db_Matcher_u
00030cd0 D vtable for WarpRenderer
00030d40 D vtable for db_CornerDetector_u
00030cf0 D vtable for SurfaceTextureRenderer
00030cb0 D vtable for Renderer

-3

抱歉,出了点问题。现在已经修复了。 - hfatih
好的,找到了,现在正在查看内部,谢谢!链接 - yang.gnay
5
这是一款没有Photo Sphere功能的不同相机应用程序。 - fhucho
6
此相机不包括照片球源代码。 - PerracoLabs
有人有安卓照片球的源代码吗? - Mr.G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接