Adquira o hábito de escrever juntos! Este é o 5º dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .
0 é escrito na frente
Acredito que os alunos que já usaram a câmera conhecem o efeito blur , que é um efeito que faz o foco focar no assunto e deixa o fundo desfocado, como o efeito blur de fundo realizado no final deste artigo.
Qual é o princípio por trás do efeito de desfoque da câmera? O que isso tem a ver com visão computacional? Este artigo leva você através dessas perguntas.
1 imagem de furo pequeno
Sabemos desde o ensino fundamental que uma imagem não existe sem luz e, para produzir uma imagem, uma cena deve ter uma ou mais fontes de luz, diretas ou indiretas.
Como mostrado na figura, a iluminação é dividida principalmente em três categorias:
- espalhamento
- luz direta
- reflexão difusa
Depois que a fonte de luz é obtida, um raio do objeto para o plano de detecção é produzido.
Como existem inúmeros raios de luz dispersos chegando ao plano de detecção a partir de um determinado ponto A do objeto, pode-se considerar que o ponto de imagem A' de A está distribuído uniformemente no plano de imagem, e o mesmo vale para outros pontos. Portanto, neste caso, o plano de detecção é o aliasing de inúmeras imagens de objetos, resultando em imagens borradas ou mesmo impossíveis.
Diante de um pedaço de papel branco, você não pode ver seu rosto, não porque não há luz de você no papel branco, mas porque a luz de diferentes partes de você se sobrepõe no papel branco, não acredite em mim, tente?
Como imagem em papel branco?
Na verdade, é muito simples, usando a imagem de pequenos buracos que foi tentada na escola primária
Essencialmente, o pequeno buraco é equivalente a um ==filtro==, retendo apenas alguns raios de luz do ponto do objeto, e uma imagem clara deve ser obtida neste momento.
2 Imagens ópticas
A desvantagem da imagem pinhole é que a luz da imagem é menor e o brilho é baixo . Para obter mais luz e evitar que os pontos da imagem sejam espalhados na superfície de detecção para causar sobreposição da imagem, é introduzida uma lente de condensação de luz . A essência da imagem de lente e imagem pinhole é evitar a incapacidade de imagem devido a pontos de imagem dispersos.A primeira usa luz de condensação, enquanto a segunda usa filtragem.
现代相机在应用上通常使用透镜成像,但不管是透镜成像还是小孔成像,都是计算机视觉研究的基本模型和假设,例如透视几何、相机内参矩阵、畸变修正等等,因此本节对于建立机器视觉的研究思维很有帮助。
3 虚化效果
介绍完前面的基础知识,终于开始图像虚化特效的原理啦!
理想透镜应保证光线聚焦于一点——焦点,这个点不会产生任何成像混叠,图像最清晰。在焦点前后光线开始四散,形成不同程度的成像重叠区域,称为弥散圆,对于人眼而言,在一定范围内影象产生的模糊是不能辨认的,不能辨认的弥散圆范围称为容许弥散圆
当对被摄主体平面调焦时,因为容许弥散圆的存在,在一定离焦范围内,成像仍然清晰,这个范围称为焦深。调整成像面和镜头距离,使成像面处于焦深内,物体可以清晰成像的过程,称为对焦。
类似地,对被摄物体而言,位于调焦物平面前后的能相对清晰成像的景物间纵深距离称为景深。图像虚化效果就和这个景深有关系!
- 景深越小,被摄物体前后能清晰成像的范围越小,也就相应地出现朦胧虚化的效果
- 景深越大,被摄物体前后能清晰成像的范围越大,也就没有虚化效果
如何调节景深?记住一句话:光圈越大景深越小,所以拿手机拍照的时候,大光圈也就代表了虚化效果!
所以下次有机会给女生拍照的话,请先确认
“请问你喜欢小景深还是大景深?”
4 代码实战
O efeito de desfoque de fundo da câmera pode ser obtido usando o filtro guiado no processamento de imagem. O código-fonte é o seguinte.
//引导滤波器
Mat guidedFilter(Mat& srcMat, Mat& guidedMat, int radius, double eps)
{
srcMat.convertTo(srcMat, CV_64FC1);
guidedMat.convertTo(guidedMat, CV_64FC1);
// 计算均值
Mat mean_p, mean_I, mean_Ip, mean_II;
boxFilter(srcMat, mean_p, CV_64FC1, Size(radius, radius)); // 生成待滤波图像均值mean_p
boxFilter(guidedMat, mean_I, CV_64FC1, Size(radius, radius)); // 生成引导图像均值mean_I
boxFilter(srcMat.mul(guidedMat), mean_Ip, CV_64FC1, Size(radius, radius)); // 生成互相关均值mean_Ip
boxFilter(guidedMat.mul(guidedMat), mean_II, CV_64FC1, Size(radius, radius)); // 生成引导图像自相关均值mean_II
// 计算相关系数、Ip的协方差cov和I的方差var------------------
Mat cov_Ip = mean_Ip - mean_I.mul(mean_p);
Mat var_I = mean_II - mean_I.mul(mean_I);
// 计算参数系数a、b
Mat a = cov_Ip / (var_I + eps);
Mat b = mean_p - a.mul(mean_I);
// 计算系数a、b的均值
Mat mean_a, mean_b;
boxFilter(a, mean_a, CV_64FC1, Size(radius, radius));
boxFilter(b, mean_b, CV_64FC1, Size(radius, radius));
// 生成输出矩阵
Mat dstImage = mean_a.mul(srcMat) + mean_b;
return dstImage;
}
复制代码
Da próxima vez, abriremos um novo capítulo para os princípios relacionados do filtro guiado.
O filtro pode ser chamado na função principal, e o efeito é mostrado no início do texto.
int main()
{
Mat resultMat;
Mat vSrcImage[3], vResultImage[3];
Mat vResultImage[3];
Mat srcImage = imread("1.jpg");
imshow("源图像", srcImage);
// 对源图像进行通道分离,并对每个分通道进行引导滤波
split(srcImage, vSrcImage);
for (int i = 0; i < 3; i++)
{
Mat tempImage;
vSrcImage[i].convertTo(tempImage, CV_64FC1, 1.0 / 255.0);
Mat cloneImage = tempImage.clone();
Mat resultImage = guidedFilter(tempImage, cloneImage, 5, 0.3);
vResultImage[i] = resultImage;
}
// 将分通道导向滤波后结果合并
merge(vResultImage, 3, resultMat);
imshow("背景虚化特效", resultMat);
waitKey(0);
return 0;
}
复制代码
Um pequeno efeito de desfoque de imagem, que envolve vários princípios de imagem óptica, constrói a base do modelo de visão computacional. Como cada um de nós, talvez você se sinta muito pequeno, talvez você seja o esteio dos outros!
Por favor, preste atenção ao arquivo de projeto completo~
Resumo do Curso de Fundamentos de Visão Computacional
Capítulo No. Conteúdo
0 Espaços de cores e imagens digitais
1 Fundamentos de geometria computacional
2 Aprimoramento de imagem, filtragem, pirâmides
3 Extração de recursos de imagem
4 Descrição do recurso de imagem
5 Correspondência de recursos de imagem
6 Visão estereoscópica
7 Projeto de combate
Mais conteúdo de alta qualidade e códigos de suporte são bem-vindos ao meu canal de IA "AI Technology Club"