IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 使用Python和OpenCV中的calcOpticalFlowFarneback函数提取稠密光流并进行映射(warp) -> 正文阅读

[人工智能]使用Python和OpenCV中的calcOpticalFlowFarneback函数提取稠密光流并进行映射(warp)

介绍

OpenCV中自带两个提取光流的函数:
cv2.calcOpticalFlowPyrLK()
cv2.calcOpticalFlowFarneback()
其中calcOpticalFlowPyrLK函数是提取稀疏光流的函数,而本文主要关注calcOpticalFlowFarneback函数,并将它应用在一个真实的问题中
具体的原理介绍可以参考知乎博客光流估计——从传统方法到深度学习

真实问题是:
给定两张图像,一张是带形变矫正的图像(unwraped_img.png),一张是参照图像(reference_img.png)。目的是提取这两张图像之间的光流,并利用提取的光流对带形变矫正的图像进行矫正,得到矫正过后的图像(warped_img.png),矫正过后的图像更可能与参考图像对齐,即没有形变误差。

calcOpticalFlowFarneback

为了本文的完整,这里搬抄了知乎博客cv2.calcOpticalFlowFarneback函数,来对calcOpticalFlowFarneback函数进行简单的介绍

调用方式

flow = cv2.calcOpticalFlowFarneback(prevImg,
									nextImg,
									None,
									pyr_scale,
									levels,
									winsize,
									iterations,
									poly_n,
									poly_sigma,
									flags)

参数解释

要注意第三个参数None,这是根据OpenCV版本决定的,有的需要这个参数,有的不需要这个参数,这需要根据报的错来判断
比如我的版本:Python=3.8.8,OpenCV=4.5.5
如果不带None这个参数,就会报一下错误:

Traceback (most recent call last):
  File ".\singleImage.py", line 15, in <module>
    flows = cv2.calcOpticalFlowFarneback(reference_img, unwraped_img,
cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'calcOpticalFlowFarneback'
> Overload resolution failed:
>  - calcOpticalFlowFarneback() missing required argument 'flow' (pos 3)
>  - calcOpticalFlowFarneback() missing required argument 'flow' (pos 3)

根据报错的信息我们可以发现,这个参数其实就是flow参数,如果版本需要这个参数传入None就可以解决
CSDN博客OpenCV Python calcOpticalFlowFarneback也提出了这个问题

其他参数解释

prevImg:前一帧8-bit单通道图像,或者是参考图像
nextImg:当前帧图像,与前一帧保持同样的格式、尺寸,即期望与参考图像一致的待矫正图像
pyr_scale:金字塔上下两层之间的尺度关系,该参数一般设置为pyrScale=0.5,表示图像金字塔上一层是下一层的2倍降采样
levels:图像金字塔的层数
winsize:均值窗口大小,winsize越大,算法对图像噪声越鲁棒,并且能提升对快速运动目标的检测效果,但也会引起运动区域模糊。个人经验:相较于其他参数,这是一个更加重要的参数,如果设置得不合理将极大地影响提取的光流正确性,建议从小到大多调调这个参数
iterations:算法在图像金字塔每层的迭代次数
poly_n:用于在每个像素点处计算多项式展开的相邻像素点的个数。poly_n越大,图像的近似逼近越光滑,算法鲁棒性更好,也会带来更多的运动区域模糊。通常,poly_n=5 or 7
poly_sigma:标准差,poly_n=5时,poly_sigma = 1.1;poly_n=7时,poly_sigma = 1.5
flags:有两种选择:1)cv2.OPTFLOW_USE_INITIAL_FLOW,使用输入流量作为初始流量近似。2)cv2.OPTFLOW_FARNEBACK_GAUSSIAN,使用高斯过滤器,而不是相同尺寸的盒形滤波器。通常,这种选择比箱形过滤器提供z更准确的流量,但代价是速度较低。通常,一个高斯窗口的winsize应该设置为一个更大的值,以达到相同的鲁棒性水平。

完整代码

注意:flow_to_image函数可以从CSDN博客python 可视化光流中获取
image_warp函数可以从CSDN博客一文搞懂光流 光流的生成,可视化以及映射(warp)

import cv2
import numpy as np
from PIL import Image

from utils.flow_show import flow_to_image
from utils.image_warp_numpy import image_warp

unwraped_img = np.asarray(Image.open('./unwraped_img.png'))
reference_img = np.asarray(Image.open('./reference_img.png'))

####### estimate flows #######
# 注意第三个参数None
# 这个参数得根据OpenCV的版本来确定是否使用
# 我这里使用的是4.5.5版本
flows = cv2.calcOpticalFlowFarneback(reference_img,
									unwraped_img,
									None,
                                    pyr_scale=0.5,
                                    levels=3,
                                    winsize=55,
                                    iterations=3,
                                    poly_n=7,  # 5, 7
                                    poly_sigma=1.5,  # 1.1, 1.5
                                    flags=cv2.OPTFLOW_FARNEBACK_GAUSSIAN)

# show flows
flow_img = flow_to_image(flows)
cv2.imwrite('./flows.png', flow_img)

# warp image
warped_img = image_warp(unwraped_img, flows)
cv2.imwrite('./warped_img.png', warped_img)

代码输入

unwraped_img.png
在这里插入图片描述
reference_img.png
在这里插入图片描述

代码输出

flows.png
在这里插入图片描述
warped_img.png
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-21 18:58:09  更:2022-05-21 19:02:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:36:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码