opencv:卷积涉及的基础概念,Sobel边缘检测代码实现及Same(相同)填充与Vaild(有效)填充

滤波

线性滤波可以说是图像处理最基本的方法,它可以允许我们对图像进行处理,产生很多不同的效果。
在这里插入图片描述

卷积

卷积的概念:

卷积的原理与滤波类似。但是卷积却有着细小的差别。 卷积操作也是卷积核与图像对应位置的乘积和。但是卷积操作在做乘积之前,需要先 将卷积核翻转180度,之后再做乘积。

卷积的数学定义:
在这里插入图片描述
一般称为g为作用在f上的filter或kernel

卷积解决的问题:
卷积负责提取图像中的局部特征

对于滤波器,也有一定的规则要求:
1)滤波器的大小应该是奇数,这样它才有一个中心,例如3x3,5x5或者7x7。有中心了,也有 了半径的称呼,例如5x5大小的核的半径就是2。
2)滤波器矩阵所有的元素之和应该要等于1,这是为了保证滤波前后图像的亮度保持不变。但 这不是硬性要求。
3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小 于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。
4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截 断到0和255之间即可。对于负数,也可以取绝对值。

卷积的应用:

第一种卷积:
一个没有任何效果的卷积
在这里插入图片描述
将原像素中间像素值乘1,其余全部乘0。 显然像素值不会发生任何变化。

第二种卷积:
平滑均值滤波

取九个值的平均值代替中间像素值 — 起到平滑的效果。
在这里插入图片描述

第三种卷积:
高斯平滑

高斯平滑水平和垂直方向呈现高斯分布,更突出了 中心点在像素平滑后的权重,相比于均值滤波而言, 有着更好的平滑效果。
在这里插入图片描述

第四种卷积:
图像锐化

图像锐化使用的是拉普拉斯变换核函数
在这里插入图片描述

第五种卷积:
边界提取的卷积:

用Gx来卷积下面这张图的话,就会在黑白边界获得比较大的值。在这里插入图片描述
手动计算可以发现Gx对横向边界会有很大的像素值,Gy是对纵向边界有很大的像素值,从而实现边界提取。

第六种卷积:
Sobel边缘检测:

Sobel更强调了和边缘相邻的像素点 对边缘的影响。
(不仅仅考虑横向和纵向的边界提取,其他方向的边界也会得到)
在这里插入图片描述
在这里插入图片描述

代码实现:

import cv2
import numpy as npimg = cv2.imread("lenna.png", 0)'''
Sobel函数求完导数后会有负值,还有会大于255的值。
而原图像是uint8,即8位无符号数(范围在[0,255]),所以Sobel建立的图像位数不够,会有截断。
因此要使用16位有符号的数据类型,即cv2.CV_16S。
''' 
x = cv2.Sobel(img, cv2.CV_16S, 1, 0)
y = cv2.Sobel(img, cv2.CV_16S, 0, 1)'''
在经过处理后,别忘了用convertScaleAbs()函数将其转回原来的uint8形式。
否则将无法显示图像,而只是一副灰色的窗口。
dst = cv2.convertScaleAbs(src[, dst[, alpha[, beta]]])  
其中可选参数alpha是伸缩系数,beta是加到结果上的一个值。结果返回uint8类型的图片。
'''absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)'''
由于Sobel算子是在两个方向计算的,最后还需要用cv2.addWeighted(...)函数将其组合起来
。其函数原型为:
dst = cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])  
其中alpha是第一幅图片中元素的权重,beta是第二个的权重,
gamma是加到最后结果上的一个值。
'''dst = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)cv2.imshow("absX", absX)
cv2.imshow("absY", absY)cv2.imshow("Result", dst)cv2.waitKey(0)
cv2.destroyAllWindows()

实现结果:

竖向:
在这里插入图片描述
横向:
在这里插入图片描述
总和结果:
在这里插入图片描述
对比图中横向和纵向的女生嘴唇可以明显看出来,横向和纵向的提取效果

步长/Stride

如果用(f, f)的过滤器来卷积一张(h, w)大小的图片,每次移动一个像素的话,那么得出的结果 就是(h-f+1, w-f+1)的输出结果。f是过滤器大小,h和w分别是图片的高宽。 如果每次不止移动一个像素,而是s个像素,那么结果就会变为:在这里插入图片描述
这个s就叫做步长。
通俗来讲,就是卷积核移动的一步的大小。

存在的问题:
• 只要是f或s的值比1要大的话,那么每次卷积之后结果的长宽,要比卷积前小一些。(比如说[5×5]的矩阵,在经过[3×3]的卷积核后的结果是[3×3],比原先[5×5]的矩阵要小)
• 丢失信息

填充/Pading

在这里插入图片描述
填充就是在原矩阵外边添加一圈或多圈全0的值。
主要用来保证卷积核输出的格式。比如说:[5×5]的矩阵,在经过[3×3]的卷积核后的结果是[3×3],我们要是像得到还是[5×5]的矩阵,就需要将原[5×5]的矩阵填充为[7×7]的矩阵,这样卷积后的结果就是[5×5]的矩阵了

Same(相同)填充:
在这里插入图片描述
Vaild(有效)填充:
在这里插入图片描述
是分数怎么办?一般的处理是,只取整数部分。
而这种p=0,然后结果取整数部分的处理方式,叫做Valid(有效)填充

Same(相同)填充和Vaild(有效)填充的区别:

SAME进行填充,,当滑动卷积核之后,若多出一列,“Same”发现余下的窗口不到卷积核大小并不会把多出的一列丢弃,但是只有一列了不够卷积核大小怎么办?填充!会在原图像外围添加一圈或者多圈全“0”(图片卷积后可能不会变小。)
在这里插入图片描述
VALID不进行填充,当滑动卷积核之后,若多出一列,“Vaild”发现余下的窗口不到卷积核大小,会就把剩下的一列直接去了(图片卷积后还是会变小。)
在这里插入图片描述

其中:W为输入的size,F为filter的size,S为步长

此处参考了网络 wuzqchom的博客
TensorFlow中CNN的两种padding方式“SAME”和“VALID”

卷积的扩展:3通道卷积

在这里插入图片描述

卷积核的确定:

CNN厉害的地方在于, 过滤器的特征并不是人为设定的,而是通过大量图片自己训练出来的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389553.shtml

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

相关文章

r psm倾向性匹配_南瓜香料指标psm如何规划季节性广告

r psm倾向性匹配Retail managers have been facing an extraordinary time with the COVID-19 pandemic. But the typical plans to prepare for seasonal sales will be a new challenge. More seasonal products have been introduced over the years, making August the bes…

主成分分析:PCA的思想及鸢尾花实例实现

主成份分析算法PCA 非监督学习算法 PCA的实现: 简单来说,就是将数据从原始的空间中转换到新的特征空间中,例如原始的空间是三维的(x,y,z),x、y、z分别是原始空间的三个基,我们可以通过某种方法,用新的坐…

两家大型网贷平台竟在借款人审核问题上“偷懒”?

python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId1005214003&utm_campaigncommission&utm_sourcecp-400000000398149&utm_mediumshare 放贷流量增加,逾期率也会随之增加&…

opencv:边缘检测之Laplacian算子思想及实现

Laplacian算子边缘检测的来源 在边缘部分求取一阶导数,你会看到极值的出现: 如果在边缘部分求二阶导数会出现什么情况? 从上例中我们可以推论检测边缘可以通过定位梯度值大于邻域的相素的方法找到(或者推广到大 于一个阀值). 从以上分析中&#xff0c…

使用机器学习预测天气_如何使用机器学习预测着陆

使用机器学习预测天气Based on every NFL play from 2009–2017根据2009-2017年每场NFL比赛 Ah, yes. The times, they are changin’. The leaves are beginning to fall, the weather is slowly starting to cool down (unless you’re where I’m at in LA, where it’s on…

laravel 导出插件

转发:https://blog.csdn.net/gu_wen_jie/article/details/79296470 版本:laravel5 php 5.6 安装步骤: 一、安装插件 ①、首先在Laravel项目根目录下使用Composer安装依赖: composer require "maatwebsite/excel:~2.1.0"…

国外 广告牌_广告牌下一首流行歌曲的分析和预测,第1部分

国外 广告牌Using Spotify and Billboard’s data to understand what makes a song a hit.使用Spotify和Billboard的数据来了解歌曲的流行。 Thousands of songs are released every year around the world. Some are very successful in the music industry; others less so…

Jmeter测试普通java类说明

概述 Apache JMeter是Apache组织开发的基于Java的压力测试工具。本文档主要描述用Jmeter工具对基于Dubbo、Zookeeper框架的Cassandra接口、区块链接口进行压力测试的一些说明,为以后类似接口的测试提供参考。 环境部署 1、 下载Jmeter工具apache-jmeter-3.3.zip&am…

opencv:Canny边缘检测算法思想及实现

Canny边缘检测算法背景 求边缘幅度的算法: 一阶导数:sobel、Roberts、prewitt等算子 二阶导数:Laplacian、Canny算子 Canny算子效果比其他的都要好,但是实现起来有点麻烦 Canny边缘检测算法的优势: Canny是目前最优…

opencv:畸变矫正:透视变换算法的思想与实现

畸变矫正 注意:虽然能够成功矫正但是也会损失了部分图像! 透视变换(Perspective Transformation) 概念: 透视变换是将图片投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。 我们常说的仿射变换是透视…

数据多重共线性_多重共线性对您的数据科学项目的影响比您所知道的要多

数据多重共线性Multicollinearity is likely far down on a mental list of things to check for, if it is on a list at all. This does, however, appear almost always in real-life datasets, and it’s important to be aware of how to address it.多重共线性可能根本不…

K-Means聚类算法思想及实现

K-Means聚类概念: K-Means聚类是最常用的聚类算法,最初起源于信号处理,其目标是将数据点划分为K个类簇, 找到每个簇的中心并使其度量最小化。 该算法的最大优点是简单、便于理解,运算速度较快,缺点是只能应…

(2.1)DDL增强功能-数据类型、同义词、分区表

1.数据类型 (1)常用数据类型  1.整数类型 int 存储范围是-2,147,483,648到2,147,483,647之间的整数,主键列常设置此类型。 (每个数值占用 4字节) smallint 存储范围是-32,768 到 32,767 之间的整数,用…

充分利用昂贵的分析

By Noor Malik努尔马利克(Noor Malik) Let’s say you write a query in Deephaven which performs a lengthy and expensive analysis, resulting in a live table. For example, in a previous project, I wrote a query which pulled data from an RSS feed to create a li…

层次聚类和密度聚类思想及实现

层次聚类 层次聚类的概念: 层次聚类是一种很直观的算法。顾名思义就是要一层一层地进行聚类。 层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再 计算类与类之间的距离&#xff0…

通配符 或 怎么浓_浓咖啡的咖啡渣新鲜度

通配符 或 怎么浓How long could you wait to brew espresso after grinding? Ask a barista, any barista, and I suspect their answer is immediately or within a few minutes. The common knowledge on coffee grounds freshness is that after 30 minutes or so, coffee…

《netty入门与实战》笔记-02:服务端启动流程

为什么80%的码农都做不了架构师?>>> 1.服务端启动流程 这一小节,我们来学习一下如何使用 Netty 来启动一个服务端应用程序,以下是服务端启动的一个非常精简的 Demo: NettyServer.java public class NettyServer {public static v…

谱聚类思想及实现

(这个我也没有怎么懂,为了防止以后能用上,还是记录下来) 谱聚类 注意:谱聚类核心聚类算法还是K-means 算法进行聚类~ 谱聚类的实现过程: 1.根据数据构造一个 图结构(Graph) &…

Tengine HTTPS原理解析、实践与调试【转】

本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验。内容主要有四个方面:HTTPS趋势、HTTPS基础、HTTPS实践、HTTPS调试。 一、HTTPS趋势 这一章节主要介绍近几年和未来HTTPS的趋势,包括两大浏览器chrome和firefox对HTTPS的…

opencv:SIFT——尺度不变特征变换

SIFT概念: Sift(尺度不变特征变换),全称是Scale Invariant Feature Transform Sift提取图像的局部特征,在尺度空间寻找极值点,并提取出其位置、尺度、方向信息。 Sfit的应用范围包括 物体辨别、机器人地图…