相机响应曲线计算(Debeve and Malik)

1.背景

相机的灰度值与实际辐照度值的关系不成线性关系,因此需要进行预标定。
在这里插入图片描述

2.算法(Debeve and Malik)

在这里插入图片描述
图片引自知乎文章横坐标表示曝光度ln(E*t),因为辐照度E不知道,所以假设为1,纵坐标表示像素值灰度百分比,曲线表示一个像素在不同曝光时间下的变化。上述曲线假设辐照度E都为1,所有这几条曲线没有重合,但理论上这几条曲线应该重合在一起,因此如果获取到这些像素的真实辐照度,即将这些曲线左右平移,表示ln(Et)=ln(E)+LN(1t),重合在一起,即可得到真实照度与像素灰度值关系。因为曲线重合在一起后会有多个结果,为了消除全局偏移不确定性,可以将中间强度的像素值的曝光度置为0进行确定。
在这里插入图片描述
上述移动的本质其实就是求解实际辐照度,具体推导思路如下所示。
在这里插入图片描述
其中Z表示像素灰度值,i表示像素序号,j表示曝光时间序号, Z i j Z_{ij} Zij表示曝光时间为 △ t \triangle t t时第i个像素的灰度值;E表示辐照度;f表示转换函数。可以推导为
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
g表示转换函数,将像素强度转变为曝光度ln(E*t)。

通过上述公式,可以知道要想总曲线达到最佳重合,可以列出公式
在这里插入图片描述
其中O为需要最小化的能量函数。前面一项为函数的最小二乘误差,后一项表示曲线的光滑度,越小表示曲线越光滑,其中 λ \lambda λ表示光滑因子。由于像素灰度值在中间范围时较为可靠,因此可以考虑添加权重函数 ω \omega ω,表示为
在这里插入图片描述
则能量函数可转换为
在这里插入图片描述
这一公式中需要求解的未知数为256+N个(256表示g函数的一一对应,N表示N个像素点的辐照度),可以列出的方程为NP个,同时由于上述将中间灰度值的辐照度置为0,则只要满足256+P ≤ \leq NP+1即可进行解算。

3.matlab代码

相关求解代码如下

function [g,lE]=gsolve(Z,B,l)

% Given a set of pixel values observed for several pixels in several
% images with different exposure times, this function returns the
% imaging system誷 response function g as well as the log film irradiance
% values for the observed pixels.
%
% Assumes:
%
%  Zmin = 0
%  Zmax = 255
%
% Arguments:
%
%  Z(i,j) is the pixel values of pixel location number i in image j
%  B(j)   is the log delta t, or log shutter speed, for image j
%  l      is lamdba, the constant that determines the amount of smoothness
% 
% Returns:
%
%  g(z)   is the log exposure corresponding to pixel value z ,g=log(E)+log(t)
%  lE(i)  is the log film irradiance at pixel location i

%  w(z)   is the weighting function value for pixel value z
% 	  here we set w(z) to a constant 

n = 256;
m = size(Z,1);
p = size(Z,2);
w = ones(n,1)/n;

% 创建稀疏零矩阵
A = sparse([], [], [], m*p+n+1,n+m, m*p*2 + n*3);% 前面两个变量为
b = zeros(size(A,1),1);

k = 1;              %% Include the data-fitting equations
for i=1:m
  for j=1:p
    wij = w(Z(i,j)+1);
    A(k,Z(i,j)+1) = wij; 
    A(k,n+i) = -wij; 
    b(k,1) = wij * B(j);
    k=k+1;
  end
end

A(k,129) = 1;       %% Fix the curve by setting its middle value to 0
k=k+1;

% 计算g(Z_ij)前后的梯度
for i=1:n-2         %% Include the smoothness equations
  A(k,i)=l*w(i+1);
  A(k,i+1)=-2*l*w(i+1); 
  A(k,i+2)=l*w(i+1);
  k=k+1;
end

% 相当于Ax=b,其中x前256为为g(i,j),后面为E_i,即对应像素的辐照度。
% A前面 m*p行每行有两个元素,分别是wij和-wij,
% 后面1行是129列处值为1,最后的255行为三个数w,-2w,w,表示梯度计算
% 
% b 为wij * B(j)
x = A\b;            %% Solve the system using SVD

g = x(1:n);
lE = x(n+1:size(x,1));

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Perona-Malik方程是一个用于图像处理计算机视觉中的非线性偏微分方程,它由计算机科学家Perona和Malik在1990年提出。该方程的目的是去除图像中的噪声并增强图像的边缘信息。 Perona-Malik方程是基于偏导数的扩散的概念,通过在图像的梯度方向上调整像素值,来实现去噪和边缘保持的效果。该方程的表达式如下: ∂I(x,y,t)/∂t = div(c(x,y,t)∇I(x,y,t)) 其中,I(x,y,t)代表图像在空间位置(x,y)和时间t处的灰度值,∂I(x,y,t)/∂t表示图像的时间变化率,div表示散度(梯度的散度),∇I(x,y,t)表示图像的梯度,c(x,y,t)是一个非线性扩散系数。 该方程中的非线性扩散系数c(x,y,t)起到了控制图像平滑程度和边缘保持的作用。当c(x,y,t)较小时,图像的平滑过程较为强烈,会导致边缘信息的模糊;而当c(x,y,t)较大时,图像的平滑程度较低,能够保留边缘的细节。 Perona-Malik方程可以通过迭代的方式来求解,每一次迭代都会根据当前像素点的梯度信息和周围像素点的差异性来更新像素值。通过多次迭代,图像中的噪声会逐渐被去除,而边缘信息则会得到保持和增强。 总而言之,Perona-Malik方程是一种用于图像去噪和边缘保持的非线性偏微分方程,通过调整像素值的梯度方向来实现图像的平滑和边缘增强。通过合适的非线性扩散系数,可以在去除图像噪声的同时保持图像的边缘信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值