如何使用 CameraX 禁用降噪功能

How to disable noise reduction with CameraX

所以我有一个使用 CameraX ImageCapture 用例拍摄自拍照片的应用程序,然后将其传递给 AI 算法以用它做一些事情。

现在,我有一位使用三星 Galaxy S21 的用户,当他在特定光线条件下的特定位置拍照时,生成的图像无法按 AI 算法的预期工作。我自己检查了这些图像,发现问题 似乎 是 ImageCapture 应用了强大的降噪功能,如此强大以至于即使对于人眼来说它看起来也不对,就像它是一幅画一样一张照片。

我向该用户发送了此类应用程序的修改版本,以尝试从分析用例中捕获图像,而生成的图像没有那个问题,所以不管它是什么,它似乎都是一些 post-由 ImageCapture 用例完成但在 Analysis 用例中未完成的处理。

现在,我似乎找不到在 CameraX 中调整此 post 处理的方法,事实上我什至还没有找到如何使用 Camera2 进行调整。起初我以为它可能是 HDR,我发现在 CameraX 中有一些扩展可以启用 HDR、夜间模式等,但根据文档,所有这些默认情况下都是禁用的,就你使用 DEFAULT_FRONT_CAMERA none应该适用,这就是我正在使用的。

CameraSelector.DEFAULT_FRONT_CAMERA

无论如何,很明显在 ImageCapture 用例中对这些图像进行了一些繁重的 post 处理,所以我想知道如何禁用这些。

顺便说一句,我尝试用 CAPTURE_MODE_MINIMIZE_LATENCY 初始化 ImageCapture 用例,希望这样的标志能减少 post 处理并希望消除降噪,但这没有用。

        imageCapture = new ImageCapture.Builder()
                .setTargetResolution(resolution)
                .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
                .build();

关于如何超越此以禁用降噪滤波器的任何想法?

谢谢, 弗兰

我找到了使用 Camera2Interop.Extender 的方法:

    private void initImageCapture(Size resolution) {
        Log.d(TAG, "initCameraCapture: ");
        ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder();
        imageCaptureBuilder
                .setTargetResolution(resolution)
                .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY);
        Camera2Interop.Extender extender = new Camera2Interop.Extender(imageCaptureBuilder);
        extender.setCaptureRequestOption(CaptureRequest.NOISE_REDUCTION_MODE, CaptureRequest.NOISE_REDUCTION_MODE_OFF);
        imageCapture = imageCaptureBuilder.build();
    }