热力学第二定律(second law of thermodynamics),热力学基本定律之一,克劳修斯表述为:热量不能自发地从低温物体转移到高温物体。开尔文表述为:不可能从单一热源取热使之完全转换为有用的功而不产生其他影响。熵增原理:不可逆热力过程中熵的微增量总是大于零。在自然过程中,一个孤立系统的总混乱度(即“熵”)不会减小。
科普
知识
前言
五一到了,大家放松的同时不要忘记学习哦。在上一期的文章中,我们学习了图像的滤波知识,了解到滤波的作用之一就是降噪,因此,滤波成为了众多图像处理任务中的首要操作,大家切记哦,今天,我们继续来学习图像的新知识--边缘检测。
一、边缘检测
1.边缘检测简介
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
以上用一句话总结:边缘检测实际就是检测图像中亮度变化有区别或者较大的地方,实际效果表现为图像中的轮廓检测。
1.1 原始图片
(各式各样的水果)
(晨间的森林,也是小编向往的地方之一)
1.2 代码实践
(1)Canny边缘检测
Canny边缘检测是一种非常流行的边缘检测算法,它是一个多阶段的算法,即由图像降噪,计算图像梯度,非极大值抑制 ,阈值筛选是个步骤构成,换句话说,只要使用这个算法,我们就会经过四个处理步骤,幸运的是,OpenCV已经为我们实现了这个函数,只要调用就可以了,一起来看看吧!
(2)Sobel边缘检测
主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量。
# -*- coding:utf8 -*-
import cv2
# Canny边缘检测算子
src_image = cv2.imread('img1.jpg')
# 读取图片转换为为灰度图像
image_gray = cv2.cvtColor(src_image,cv2.COLOR_BGR2GRAY)
# 边缘检测之前先进行滤波,降噪,滤波方式为高斯滤波
filter_image = cv2.GaussianBlur(image_gray, (5, 5), 0)
# 调用canny算子,进行边缘检测 48,170是一个调整范围,根据实际情况选用
canny_image = cv2.Canny(filter_image, 48, 170) # 48是最小阈值,170是最大阈值
# Sobel边缘检测算子,之前的文章讲到过,这里拿来直接使用
x = cv2.Sobel(image_gray, cv2.CV_16S, 1, 0)
y = cv2.Sobel(image_gray, cv2.CV_16S, 0, 1)
Scale_absX = cv2.convertScaleAbs(x)
Scale_absY = cv2.convertScaleAbs(y)
# 此处采用图像融合函数得到sobel检测结果
Sobel_image = cv2.addWeighted(Scale_absX, 0.5, Scale_absY, 0.5, 0)
cv2.imshow('src_image', src_image)
cv2.imshow('canny_image', canny_image)
cv2.imshow('Sobel_image', Sobel_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码解读:从第一段代码中,我们可以看到,代码首先对输入的图像进行了高斯滤波,然后调用了canny算子进行边缘检测,cv2.Canny()函数通常为三个参数(也有其他参数,较少使用哦),第一个为需要进行边缘检测的图像,第二三个参数分别为检测的上下限(最小阈值,最大阈值)。
1.3 效果展示
(展示结果1)
(展示结果2)
结果分析:可以看到,上图中sobel算子检测结果更接近于实际感觉,canny算子更清晰,实际用到的时候再来具体考虑,一般优先使用canny算子。
结语
今天的分享结束了,我们主要学习了canny和sobel算子的使用,大家一定要去实践哦!
祝大家五一劳动节快乐!
编辑:玥怡居士|审核:小圈圈居士
▼
往期精彩回顾
▼
扫码关注更多精彩
点亮在看,你最好看!