1

当我们在光线不好的房间中使用移动或半专业相机时,它们通常会增加 ISO,结果如下所示:

截屏

这是视频中的一帧,您可以看到有很多噪音。也许这有点奇怪,但我需要在高质量视频上产生类似的噪音。然而,一个简单的噪声发生器会产生类似的东西:

样本

有谁知道如何在第一帧上获得结果?或者,也许有一些现有的噪声发生器/算法来制作它?我将不胜感激任何帮助。

4

3 回答 3

2

您在该帧中看到的不是原始传感器噪声,也不是公认的答案似乎暗示的胶片颗粒模拟。相反,它是应用于高 ISO 图像的降噪滤波器的结果。如果没有滤波器,您会看到很多噪声,主要是泊松噪声。

我不知道相机中内置了什么降噪滤镜,但它可能会在转换为 RGB 之前应用于原始图像。这里有许多描述这种过滤器的论文

于 2021-06-19T13:43:29.703 回答
1

你基本上需要增加“颗粒”的大小,也许你的噪音点会变平。

很难获得看起来自然的结果,因为视频中的那些颗粒点是通过对从相机传感器获得的值进行的各种插值获得的(传感器产生的特定噪声)。
以“模拟”胶卷相机为例(用胶卷拍摄的照片从胶卷本身使用的矿物的有效颗粒大小/形状来看具有颗粒状的自然外观)。如果在数字图像上制作看起来自然的胶片滤镜是如此容易,那么电影业就不会看到现在发生的卷土重来。

话虽如此,我想到了三件事可以起作用:

中值模糊(图像+一些噪音):
https://docs.opencv.org/master/d4/d13/tutorial_py_filtering.html 在此处输入图像描述

使用 Perlin 噪声生成的图像,根据您的特定帧大小进行缩放 + 添加图像的颜色 * 一些因素:
https
在此处输入图像描述 ://github.com/ruslangrimov/perlin-noise-python-numpy * 因素 + 你的图像= 结果


使用设置为产生相同帧分辨率和高 ISO 的相机拍摄一个非常黑暗的房间,在您的视频上添加获得的视频帧(要应用一些图像处理)。
希望这对您的项目有所帮助并祝您好运。
于 2021-06-19T10:03:35.850 回答
1

我假设您只是在图像中添加了小的随机 RGB...

我会保持颜色不变,并尝试通过少量随机降低颜色强度以使图像变暗并产生类似形式的噪声。只需将您的 RGB 颜色与小于一的随机数相乘...

为了提高视觉效果,随机值应具有高斯分布或类似分布。这里是小的 C++/VCL 示例:

//$$---- Form CPP ----
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "win_main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TMain *Main;
Graphics::TBitmap *bmp0,*bmp1;
//---------------------------------------------------------------------------
__fastcall TMain::TMain(TComponent* Owner) : TForm(Owner)
    {
    // init bmps and load from file
    bmp0=new Graphics::TBitmap;
    bmp1=new Graphics::TBitmap;
    bmp0->LoadFromFile("in.bmp");
    bmp0->HandleType=bmDIB;
    bmp0->PixelFormat=pf32bit;
    bmp1->Assign(bmp0);
    ClientWidth=bmp0->Width;
    ClientHeight=bmp0->Height;
    Randomize();
    }
//---------------------------------------------------------------------------
void __fastcall TMain::FormDestroy(TObject *Sender)
    {
    // free bmps before exit
    delete bmp0;
    delete bmp1;
    }
//---------------------------------------------------------------------------
void __fastcall TMain::tim_updateTimer(TObject *Sender)
    {
    // skip if App not yet initialized
    if (bmp0==NULL) return;
    if (bmp1==NULL) return;
    int x,y,i,a;
    union _color
        {
        BYTE db[4];
        DWORD dd;
        };
    // copy bmp0 into bmp1 with light reduction and noise
    for (y=0;y<bmp0->Height;y++)
        {
        _color *p0=(_color*)bmp0->ScanLine[y];
        _color *p1=(_color*)bmp1->ScanLine[y];
        for (x=0;x<bmp0->Width;x++)
            {
            p1[x]=p0[x];
            for (a=40,i=0;i<10;i++) a+=Random(10);                      // "gauss" PRNG in range 40 .. 140
            for (i=0;i<3;i++) p1[x].db[i]=(DWORD(p1[x].db[i])*a)>>8;    // multiply RGB by a/256
            }
        }
    // render frame on App canvas
    Canvas->Draw(0,0,bmp1);
//  bmp1->SaveToFile("out.bmp");
    }
//---------------------------------------------------------------------------

输入图像:

在

输出图像:

输出

您可以使用 PRNG 属性来调整光线和噪音。

于 2021-06-19T12:03:05.050 回答