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

前言

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

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

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

  • 求边缘的幅度: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.mzph.cn/web/62833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智能技术引领未来:自动图像标注的创新应用与发展

🍑个人主页:Jupiter. 🚀 所属专栏:传知代码 欢迎大家点赞收藏评论😊 目录 概述算法原理核心逻辑效果演示使用方式参考文献 参考文献:需要本文的详细复现过程的项目源码、数据和预训练好的模型可从该地址处获…

C语言-排序

常见的排序算法分为以下四种,插入排序,选择排序,交换排序,归并排序。 一、插入排序 (一)直接插入排序 直接插入排序,将一段数组看做被分成已排序序列和未排序序列,排序过程是从未排序序列的元素开始&…

【Java笔记】LinkedList 底层结构

一、LinkedList 的全面说明 LinkedList底层实现了双向链表和双端队列特点可以添加任意元素(元素可以重复),包括null线程不安全,没有实现同步 二、LinkedList 的底层操作机制 三、LinkedList的增删改查案例 public class LinkedListCRUD { public stati…

网管平台(基础篇):路由器的介绍与管理

路由器简介 路由器(Router)是一种计算机网络设备,它的主要作用是将数据通过打包,并按照一定的路径选择算法,将网络传送至目的地。路由器能够连接两个或更多个网络,并根据信道的情况自动选择和设定路由&…

排序算法(2):选择排序

问题 排序 [30, 24, 5, 58, 18, 36, 12, 42, 39] 选择排序 选择排序每次从待排序序列中选出最小(或最大)的元素,将其放到序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素…

Tongweb8命令行使用收集(by lqw)

文章目录 声明对应版本修改thanos用户密码部署应用到默认实例节点相关操作新增节点(一般一个服务器ip只能装一个节点)启动节点(需确认节点没有运行)停止节点删除节点节点新增应用节点查看应用节点启动应用节点停止应用节点卸载应用(谨慎操作,卸载后应用就没有了,建议备份后…

Artec Leo3D扫描仪在重型机械设备定制中的应用【沪敖3D】

挑战:一家加拿大制造商需要有效的方法,为富于变化且难度较高的逆向工程,快速、安全、准确地完成重型机械几何采集。 解决方案:Artec Leo, Artec Studio, Geomagic for SOLIDWORKS 效果:Artec Leo三维扫描代替过去的手动…

题海拾贝:力扣 141.环形链表

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

Vite快速构建Vue教程

步骤 1: 初始化项目目录 创建一个名为 projects 的文件夹&#xff0c;作为存放所有 Vite 项目的根目录。这个文件夹将容纳多个独立的 Vite 项目。 步骤 2: 创建 Vite 项目 右键点击 projects 文件夹并选择“在此处打开终端”或使用您偏好的代码编辑器&#xff08;如 VSCode&…

深入理解 CSS 文本换行: overflow-wrap 和 word-break

前言 正常情况下&#xff0c;在固定宽度的盒子中的中文会自动换行。但是&#xff0c;当遇到非常长的英文单词或者很长的 URL 时&#xff0c;文本可能就不会自动换行&#xff0c;而会溢出所在容器。幸运的是&#xff0c;CSS 为我们提供了一些和文本换行相关的属性&#xff1b;今…

HarmonyOS 5.0应用开发——属性动画

【高心星出品】 文章目录 属性动画animateTo属性动画animation属性动画 属性动画 属性接口&#xff08;以下简称属性&#xff09;包含尺寸属性、布局属性、位置属性等多种类型&#xff0c;用于控制组件的行为。针对当前界面上的组件&#xff0c;其部分属性&#xff08;如位置属…

《探索视频数字人:开启未来视界的钥匙》

一、引言 1.1视频数字人技术的崛起 在当今科技飞速发展的时代&#xff0c;视频数字人技术如一颗璀璨的新星&#xff0c;正逐渐成为各领域瞩目的焦点。它的出现&#xff0c;犹如一场科技风暴&#xff0c;彻底改变了传统的视频制作方式&#xff0c;为各个行业带来了前所未有的机…

免费下载 | 2024算网融合技术与产业白皮书

《2024算网融合技术与产业白皮书&#xff08;2023年&#xff09;》的核心内容概括如下&#xff1a; 算网融合发展概述&#xff1a; 各国细化算网战略&#xff0c;指引行业应用创新升级。 算网融合市场快速增长&#xff0c;算力互联成为投资新热点。 算网融合产业模式逐渐成型…

基于卷积神经网络的图像二分类检测模型训练与推理实现教程 | 幽络源

前言 对于本教程&#xff0c;说白了&#xff0c;就是期望能通过一个程序判断一张图片是否为某个物体&#xff0c;或者说判断一张图片是否为某个缺陷。因为本教程是针对二分类问题&#xff0c;因此主要处理 是 与 不是 的问题&#xff0c;比如我的模型是判断一张图片是否为苹果…

RabbitMQ个人理解与基本使用

目录 一. 作用&#xff1a; 二. RabbitMQ的5中队列模式&#xff1a; 1. 简单模式 2. Work模式 3. 发布/订阅模式 4. 路由模式 5. 主题模式 三. 消息持久化&#xff1a; 消息过期时间 ACK应答 四. 同步接收和异步接收&#xff1a; 应用场景 五. 基本使用 &#xff…

前端怎么预览pdf

1.背景 后台返回了一个在线的pdf地址&#xff0c;需要我这边去做一个pdf的预览&#xff08;需求1&#xff09;&#xff0c;并且支持配置是否可以下载&#xff08;需求2&#xff09;&#xff0c;需要在当前页就能预览&#xff08;需求3&#xff09;。之前我写过一篇预览pdf的文…

滑动窗口算法专题

滑动窗口简介 滑动窗口就是利用单调性&#xff0c;配合同向双指针来优化暴力枚举的一种算法。 该算法主要有四个步骤 1. 先进进窗口 2. 判断条件&#xff0c;后续根据条件来判断是出窗口还是进窗口 3. 出窗口 4.更新结果&#xff0c;更新结果这个步骤是不确定的&#xff0c…

C# 中的Task

文章目录 前言一、Task 的基本概念二、创建 Task使用异步方法使用 Task.Run 方法 三、等待 Task 完成使用 await 关键字使用 Task.Wait 方法 四、处理 Task 的异常使用 try-catch 块使用 Task.Exception 属性 五、Task 的延续使用 ContinueWith 方法使用 await 关键字和异步方法…

【AIGC】如何高效使用ChatGPT挖掘AI最大潜能?26个Prompt提问秘诀帮你提升300%效率的!

还记得第一次使用ChatGPT时&#xff0c;那种既兴奋又困惑的心情吗&#xff1f;我是从一个对AI一知半解的普通用户&#xff0c;逐步成长为现在的“ChatGPT大神”。这一过程并非一蹴而就&#xff0c;而是通过不断的探索和实践&#xff0c;掌握了一系列高效使用的技巧。今天&#…

浩辰CAD教程004:柱梁板

文章目录 柱梁板标准柱角柱构造柱柱齐墙边绘制梁绘制楼板 柱梁板 标准柱 绘制标准柱&#xff1a; ①&#xff1a;点选插入柱子②&#xff1a;沿着一根轴线布置柱子③&#xff1a;指定的矩形区域内的轴线交点插入柱子 替换现有柱子&#xff1a;选择替换之后的柱子形状&#x…