SLMaster icon indicating copy to clipboard operation
SLMaster copied to clipboard

怎么进行双目实时重建

Open zhaoBeauty opened this issue 1 year ago • 2 comments

Desktop (please complete the following information):

  • Windows OS Version: [e.g. windows 11]
  • SLMaster Version: [e.g. 1.2.5]
  • OpenCV Version: [e.g. 4.5.5]
  • VTK Version: [e.g. 9.2.0]
  • PCL Version: [e.g. 1.13.1]
  • Qt Version: [e.g. 5.15.2]

博主代码里怎么进行双目实时重建?就是二值离焦后再用互补格雷码相位展开在匹配重建。 投影仪那里怎么操作?

zhaoBeauty avatar May 07 '24 15:05 zhaoBeauty

没太明白意思,就正常的解相、匹配就行了。都是用CUDA加速会更快点,但用互补格雷码方案,会由于图像数目过多导致帧率比较低。投影仪简单离焦就行了。可以自行查阅部分源码

bool BinocularCamera::continuesCapture(SafeQueue<FrameData> &frameDataQueue) {
    if (!isCaptureStop_.load(std::memory_order_acquire)) {
        return true;
    }


    if (imgCreateThread_.joinable()) {
        imgCreateThread_.join();
    }


    if (frameDataCreateThread_.joinable()) {
        frameDataCreateThread_.join();
    }


    isCaptureStop_.store(false, std::memory_order_release);


    imgCreateThread_ = std::thread([&] {
        const device::CameraFactory::CameraManufactor manufator =
            stringProperties_["2D Camera Manufactor"] == "Huaray"
                ? device::CameraFactory::Huaray
                : device::CameraFactory::Halcon;
        auto pLeftCamera = cameraFactory_.getCamera(
            stringProperties_["Left Camera Name"], manufator);
        auto pRightCamera = cameraFactory_.getCamera(
            stringProperties_["Right Camera Name"], manufator);


        device::Camera *pColorCamera = nullptr;
        if (stringProperties_["Color Camera Name"] != "") {
            pColorCamera = cameraFactory_.getCamera(
                stringProperties_["Color Camera Name"], manufator);
        }


        const int imgSizeWaitFor = numbericalProperties_["Total Fringes"];


        while (!isCaptureStop_.load(std::memory_order_acquire)) {
            if (pLeftCamera->getImgs().size() >= imgSizeWaitFor &&
                pRightCamera->getImgs().size() >= imgSizeWaitFor &&
                (pColorCamera ? pColorCamera->getImgs().size() >= imgSizeWaitFor
                              : true)) {
                std::vector<std::vector<cv::Mat>> imgs(pColorCamera ? 3 : 2);
                int index = 0;
                while (index != imgSizeWaitFor) {
                    imgs[0].emplace_back(pLeftCamera->popImg());
                    imgs[1].emplace_back(pRightCamera->popImg());
                    if (pColorCamera) {
                        imgs[2].emplace_back(pColorCamera->popImg());
                    }
                    ++index;
                }


                if (imgsCreated_.size() > 2) {
                    continue;
                }


                imgsCreated_.push(imgs);
            }
        }
    });


    frameDataCreateThread_ = std::thread([&] {
        while (!isCaptureStop_.load(std::memory_order_acquire)) {
            if (imgsCreated_.empty()) {
                std::this_thread::sleep_for(std::chrono::milliseconds(5));
                continue;
            }


            std::vector<std::vector<cv::Mat>> imgs;
            imgsCreated_.move_pop(imgs);


            if (stringProperties_["Color Camera Name"] != "") {
                for (int i = 0; i < imgs.size(); ++i) {
                    cv::cvtColor(imgs[i], imgs[i], cv::COLOR_BayerBG2BGR);
                }
            }


            FrameData curFrameData;
            decode(imgs, curFrameData);
            frameDataQueue.push(curFrameData);
        }
    });


    projectorFactory_.getProjector(stringProperties_["DLP Evm"])->project(true);


    return true;
}

Practice3DVision avatar May 09 '24 04:05 Practice3DVision

好的,谢谢您!

zhaoBeauty avatar May 09 '24 08:05 zhaoBeauty