CV(4)--边缘提取和相机模型

news/2024/12/14 17:01:02/

前言

仅记录学习过程,有问题欢迎讨论

边缘提取(涉及语义分割):

图象的边缘是指图象局部区域亮度变化显著的部分,也有正负之分,暗到亮为正

  • 求边缘的幅度:sobel,Canny算子

  • 图像分高频分量和低频分量,高频分量就是灰度变化剧烈的地方(显眼)

图像锐化:目的是使图像的边缘更加清晰,细节部分更加突出,常用拉普拉斯变化核函数。

边缘检测的步骤:边缘检测就是提取高频分量。在边缘像素值会出现”跳跃“或者较大的变化

  1. 滤波:边缘检测的算法主要是基于图像强度的一阶和二阶导数(为0,一阶极值),但导数通常对噪声很敏感,
    所以采用滤波减弱噪声。常见的滤波方法主要有高斯滤波。
  2. 增强:增强边缘的基础是确定图像各点邻域强度的变化值并凸显出显著变化点。
  3. 检测:经过增强的图像,往往邻域中有很多点的梯度值比较大,可以采用用阈值化方法来检测方法来对这些点进行取舍。

Canny边缘检测算法:

  1. 灰度化后高斯滤波:消除噪声
    高斯卷积核大小影响Canny检测的性能,越大,检测对噪声敏感越低,定位误差也会增大,5*5还行
  2. 检测图像的水平/垂直边缘:计算梯度—Sobel算子
    用类似于[-1,0,1][-2,0,2][-1,0,1]的矩阵来求梯度的幅值,幅值较大的像素点的为边缘
  3. 非极大值抑制:去除边缘检测带来的杂散响应
    • 搜素局部最大值,抑制非极大值,去除冗余的边缘。通俗就是找到像素局部最大值,其他值置为0,就可以剔除大部分非边缘点。
    • 沿着梯度方向比较像素点的值,保留最大像素点
  4. 双阈值检测和连接边缘:滞后阈值法
    • 大于高阈值为强边缘,小于低阈值不是边缘。介于中间是弱边缘。
    • 阈值的选择取决于给定输入图像的内容,和噪声点的区别就是是否连续:

相机模型(实际就是坐标系转化):

针孔相机模型存在四个坐标系:世界坐标系、摄像机坐标系、图像物理坐标系和图像像素坐标系。

  • 世界坐标系的坐标为Pw(Xw,Yw,Zw),
  • 对应的摄像机坐标系坐标为Po(x,y,z),–齐次方程做坐标系变化
  • 对应的图像物理坐标系的坐标为P’(x’,y’),–相似三角的原理等比例
  • 对应的图像像素坐标系的坐标为p(u,v)。–转化为长度为像素单位!
    在这里插入图片描述

在这里插入图片描述

镜头畸变

  • 畸变是由于透镜形状和制造工艺的误差造成的,分为径向畸变和切向畸变。
  • 径向畸变是由于透镜形状的曲线造成,分为枕形畸变和桶形畸变。
  • 切向畸变是由于透镜制造工艺的误差造成的,分为对称畸变和非对称畸变。
  • 可以通过透视变化(投影为新平面)来矫正畸变图片
    通过4个点(两组x,y)来确定关系,然后投影新平面图片

Canny算法和透视变化

"""
1-实现canny算法2-实现透视变换
"""
import cv2
import numpy as np# 实现Canny
def CannyDemo(img, low, high):# 灰度化gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 高斯滤波blur = cv2.GaussianBlur(gray, (5, 5), 0)# 采用sobel 算子求梯度[x,y方向求梯度,找出变化最大的像素点]grad_x = cv2.Sobel(blur, cv2.CV_16S, 1, 0, ksize=3)grad_y = cv2.Sobel(blur, cv2.CV_16S, 0, 1, ksize=3)# 转回uint8abs_grad_x = cv2.convertScaleAbs(grad_x)abs_grad_y = cv2.convertScaleAbs(grad_y)# 合并梯度dst = cv2.addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0)# 非极大值抑制dst = cv2.Canny(dst, low, high)return dst# 实现透视变化
def getWarpPerspectiveMatrix(img, dst):nums = img.shape[0]x = np.zeros((2 * nums, 8))  # x*warpMatrix=yy = np.zeros((2 * nums, 1))for i in range(0, nums):x_i = src[i, :]y_i = dst[i, :]x[2 * i, :] = [x_i[0], x_i[1], 1, 0, 0, 0,-x_i[0] * y_i[0], -x_i[1] * y_i[0]]y[2 * i] = y_i[0]x[2 * i + 1, :] = [0, 0, 0, x_i[0], x_i[1], 1,-x_i[0] * y_i[1], -x_i[1] * y_i[1]]y[2 * i + 1] = y_i[1]x = np.mat(x)# 用x.I求出x的逆矩阵,然后与y相乘,求出warpMatrixmatrix = x.I * y  # 求出a_11, a_12, a_13, a_21, a_22, a_23, a_31, a_32# 之后为结果的后处理matrix = np.array(matrix).T[0]matrix = np.insert(matrix, matrix.shape[0], values=1.0, axis=0)  # 插入a_33 = 1matrix = matrix.reshape((3, 3))return matrixif __name__ == '__main__':img = cv2.imread('lenna.png')# canny边缘检测# canny = CannyDemo(img, 50,150)# cv2.imshow('canny', canny)# cv2.waitKey(0)# 实现透视变化img1 = cv2.imread('photo1.jpg')src = np.float32([[207, 151], [517, 285], [17, 601], [343, 731]])dst = np.float32([[0, 0], [337, 0], [0, 488], [337, 488]])print(img.shape)# 生成透视变换矩阵;进行透视变换result = getWarpPerspectiveMatrix(src, dst)print("warpMatrix:")print(result)img_perspective = cv2.warpPerspective(img1, result, (337, 488))cv2.imshow("img_perspective", img_perspective)cv2.waitKey(0)

http://www.ppmy.cn/news/1555069.html

相关文章

自然语言处理基础及应用场景

自然语言处理定义 让计算机理解人所说的文本 语音 Imitation Game 图灵测试 行为主义 鸭子理论 自然语言处理的基本任务 词性标注:区分每个词名词、动词、形容词等词性命名实体的识别:名词的具体指代是哪一类事物共指消解:代词指代的是前面…

Hadoop中几种列式存储的区别和联系

第一章 相关理论 1.1 Parquet格式介绍 1.1.1 起源与发展 Parquet,作为Hadoop生态系统中的一种新型列式存储格式,由Cloudera和Twitter公司联手开发,并已跻身至Apache软件基金会的顶级项目之列。自其诞生以来,便以高效的压缩和编…

机器学习环境

如果没有指定 Python 版本,通常建议使用 Python 的最新稳定版本,因为它通常会包含最新的功能和安全修复。对于大多数库来说,Python 3.8、3.9 和 3.10 都是广泛支持的版本。以下是考虑到兼容性和稳定性的改进后的环境配置: 指定 Py…

iOS 环境搭建教程

本文档将详细介绍如何在 macOS 上搭建 iOS 开发环境,以便进行 React Native 开发。(为了保证环境一致 全部在网络通畅的情况下运行) 1. 安装 Homebrew Homebrew 是 macOS 的包管理工具,我们将通过它来安装开发所需的工具。 安装…

路径规划之启发式算法之十六:和声搜索算法(Harmony Search, HS)

和声搜索算法(Harmony Search, HS)是一种新兴的启发式全局搜索算法,是一种模拟音乐家即兴演奏过程的群体智能优化算法。这种算法由Zong Woo Geem等人在2001年提出,灵感来源于音乐家在寻找和声时的创造性思维过程。HS算法通过模拟音乐家演奏音乐时的选择过程来寻找问题的最优…

nginx设置反向代理接口超时时间

在Nginx中设置反向代理接口超时时间,你需要使用proxy_read_timeout指令。这个指令定义了Nginx等待被代理服务器响应的最长时间。如果在这个时间内没有收到响应,Nginx将关闭连接。 以下是一个配置示例,其中设置了10秒的超时时间: …

3D 生成重建037-GAUSSIANANYTHING通过点云与外观的混合策略进行3dgs生成

3D 生成重建037-GAUSSIANANYTHING通过点云与外观的混合策略进行3dgs生成 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 虽然现有的三维内容生成方法取得了显著进展,但它们在生成高质量、易编辑且可控的三维模型方面仍然面临着挑战。现有的方法通常依赖于代…

【html网页页面010】html+css制作茶品牌文创网页制作含视频元素(7页面附效果及源码)

茶主题品牌文创网页制作 🥤1、写在前面🍧2、涉及知识🌳3、网页效果完整效果(7页):代码目录结构:page1、主页page2、精品包装page3、茶园一角page4、品牌地带page5、衍生品page6、联X我们page7、视频详情页 &#x1f30…