总结(CFAI,AWB,Denoise2D,Sharpen)

本文深入探讨了图像处理中的关键技术,包括CFAI(色彩滤波阵列插值)/去马赛克、自动白平衡(AWB)、二维空域降噪以及锐化。CFAI介绍了双线性插值和色比色差方法,AWB讲解了灰度世界、最大响应和Shades of Gray等经典方法,降噪部分涵盖了中值、均值、高斯和双边滤波,而锐化则阐述了Roberts、Prewitt、Sobel、Laplacian和Canny等算子的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CFAI/Demosaic,AWB,Denoise2D,Sharpen

CFAI (Color Fliter Array Interpolation)/ Demosaic

1.https://www.cnblogs.com/sunny-li/p/8641767.html
2.基于bayer格式的去马赛克算法研究及硬件实现 浙大 丁文

图1. bayer sensor

CMOS或者CCD感光器件只能记录光子的能量,并不能记录光波的波长(即色彩信息),所以,为了得到图像的颜色信息,可以通过在每个感光器前先让光经过某一颜色滤光片,得到该颜色光的强度。根据三基色定理,我们只需要获得RGB三通道的值即可。

设置Color Fliter Array有两种模式,一种是将RGB堆叠,让光依次经过RGB滤光片,每个像素都能获得RGB值,这种模式价格昂贵,且不好制造。另一种模式如图1所示,为bayer色彩滤波阵列,由一半的G(因为人眼对绿色最敏感),1/4的R,1/4的B组成。bayer模式的排列方式多样,RGGB, GBRG,GRBG,BGGR。甚至根据需求可以加入其它通道,如RGBW,RYYB(华为 P30手机)。
bayer sensor每个像素点仅获取了一种通道的值,需要根据相邻像素点通过插值补齐缺失的通道值,这一过程称为Demosaic,即将bayer模式的Raw格式图像转化为Camera Sensor下的RGB图像。
插值的方法多样,最简单的方法如邻近插值,线性邻域插值,这类方法会模糊细节,易产生伪彩色;进一步可以利用空间信息(边缘等)或通道相关性插值。这里演示了双线性插值方法和色比色差方法,色比色差方法包含了基于边缘的方法。

Demosaic一般遵循以下几个原则:
1.先对G分量进行插值,因为G的像素个数是RB的两倍,更能反映图像空间信息。
2.插值时采用方向性插值,即如果是垂直的边缘,则采用上下的像素进行插值,而不选用左右
3.色差恒定,即相邻点的R(i,j)-R(i, j+1) = G(i,j)-G(i, j+1)

双线性插值

算法思路:在3*3大小的邻域内,获得目标通道的平均值,作为中心像素点缺失通道值。
效果图如下(选取图像某一部分),可以看到在边缘处有很明显的伪彩色和拉链效应。

色比色差方法

Adams J E, Hamilton J F. Adaptive color plane interpolation in single color electronic camera[J]. Us Patent No, 1997.

(1) 绿色分量重建

首先恢复红色和蓝色采样点处的绿色分量。根据方向性进行插值,中心红色采样点R(i,j)处水平方向和垂直方向检测算子计算如下:
Δ H i , j = ∣ G i , j − 1 − G i , j + 1 ∣ + ∣ 2 R i , j − R i , j − 2 − R i , j + 2 ∣ \Delta H_{i,j}=\vert G_{i,j-1}-G_{i,j+1} \vert +\vert 2R_{i,j}-R_{i,j-2}-R_{i,j+2} \vert ΔHi,j=Gi,j1Gi,j+1+2Ri,jRi,j2Ri,j+2 Δ V i , j = ∣ G i − 1 , j − G i + 1 , j ∣ + ∣ 2 R i , j − R i − 2 , j − R i + 2 , j ∣ \Delta V_{i,j}=\vert G_{i-1,j}-G_{i+1,j} \vert +\vert 2R_{i,j}-R_{i-2,j}-R_{i+2,j} \vert ΔVi,j=Gi1,jGi+1,j+2Ri,jRi2,jRi+2,j
绿色分量重建公式如下:
g i , j = { G i , j − 1 + G i , j + 1 2 + ( 2 R i , j − R i , j − 2 − R i , j + 2 ) 4 Δ H i , j < Δ V i , j G i − 1 , j + G i + 1 , j 2 + ( 2 R i , j − R i − 2 , j − R i + 2 , j ) 4 Δ H i , j > Δ V i , j G i − 1 , j + G i + 1 , j + G i , j − 1 + G i , j + 1 4 + ( 4 R i , j − R i − 2 , j − R i + 2 , j − R i , j − 2 − R i , j + 2 ) 8 Δ H i , j = Δ V i , j g_{i,j}=\begin{cases} \frac{G_{i,j-1}+G_{i,j+1}}{2}+\frac{(2R_{i,j}-R_{i,j-2}-R_{i,j+2})}{4} & \Delta H_{i,j}< \Delta V_{i,j} \\ \frac{ G_{i-1,j}+G_{i+1,j}}{2}+\frac{(2R_{i,j}-R_{i-2,j}-R_{i+2,j})}{4} & \Delta H_{i,j}> \Delta V_{i,j} \\ \frac{ G_{i-1,j}+G_{i+1,j}+G_{i,j-1}+G_{i,j+1}}{4}+\frac{(4R_{i,j}-R_{i-2,j}-R_{i+2,j}-R_{i,j-2}-R_{i,j+2})}{8} & \Delta H_{i,j}= \Delta V_{i,j} \end{cases} gi,j=2Gi,j1+Gi,j+1+4(2Ri,jRi,j2Ri,j+2)2Gi1,j+Gi+1,j+4(2R

import numpy as np import matplotlib.pyplot as plt from sympy import symbols, exp, sqrt, pi, factorial, diff, hermite, lambdify,evalf,Piecewise, Eq, Function,Float,Abs, Pow,hyper,N import math import numpy as np import matplotlib.pyplot as plt import math L=35#坐标取值范围 d=0.01#buchang N1=L/d-1#节点shu N1=int(N1) xs=[] #存储节点,自变量数组 x0=0 #初始点位设为0 for _ in range(N1) : x0=x0+d xs.append(x0) #print(xs[N-1])检查节点 c=137.036 alpha=1/137.036 dt1=1/(2*d) k=1 n=1 Ejiexi=c*c/sqrt( 1+ alpha*alpha/( (n-Abs(k) +sqrt(k*k-alpha*alpha) ) * (n-Abs(k) +sqrt(k*k-alpha*alpha) ) ) ) yipu=Ejiexi/(c*c) lanmuda=c*sqrt(1-yipu*yipu) gama=sqrt(k*k-alpha*alpha) npie=yipu/lanmuda-gama cfai1=-c*npie/sqrt(-k+1/lanmuda) cfai2=c*sqrt(-k+1/lanmuda) rou,a, b, z = symbols('rou a b z') fai1=0 fai2=0#仅用来存每一点的数 xx1=0#仅用来存每一点的x1数 i=0 x1=[] for _ in range(N1): rou=xs[i]*2*lanmuda a=1-npie b=2*gama+1 z=rou fai1=cfai1* Pow(rou,gama-1) * N(hyper([a], [b], z) ) a=-npie fai2=cfai2*Pow(rou,gama-1) * N(hyper([a], [b], z) ) xx1=sqrt(1-yipu) * exp(-lanmuda*xs[i]) * (fai1-fai2) x1.append(xx1) i=i+1 xx2=0#仅用来存每一点的x2数 i=0 x2=[] for _ in range(N1): rou=xs[i]*2*lanmuda a=1-npie b=2*gama+1 z=rou fai1=cfai1* Pow(rou,gama-1) * N(hyper([a], [b], z) ) a=-npie fai2=cfai2* Pow(rou,gama-1) * N(hyper([a], [b], z) ) xx2=sqrt(1+yipu) * exp(-lanmuda*xs[i]) * (fai1+fai2) x2.append(xx2) i=i+1 gui=0 agui=0 i=0 for _ in range(N1): gui=x1[i]*x1[i]*d+x2[i]*x2[i]*d agui=agui+gui i=i+1 agui=sqrt(agui) i=0 for _ in range(N1): x1[i]=x1[i]/agui x2[i]=x2[i]/agui i=i+1 #取90个点,每38取一次,为读能量改为1,后续把1改为90 fr=[] gr=[] i=0 for _ in range(90): fr.append(x1[i]/xs[i]) gr.append(x2[i]/xs[i]) i=i+38 i=0 for _ in range(90): print(fr[i]) i=i+1 print('2') i=0 for _ in range(90): print(gr[i]) i=i+1帮我检查一下这段输出氢原子狄拉克方程径向波函数解析解的代码哪里有问题,为什么输出与期望不符
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值