这是一个$$ f(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi $$
行内公式 这是一个公式 katex f(x) = \\int_{-\\infty}^\\infty\\hat f(\\xi)\\,e^{2 \\pi i \\xi x}\\,d\\xi
关于一些功能测测试会在这篇文章中进行
微梦云盘视频外链速度测试
芭芭拉冲呀!
[vplayer url=https://pan.vinua.cn/api/v3/file/source/6123/%E5%8E%9F%E7%A5%9E%202022-02-07%2023-53-19.mp4?sign=smSPGJgCo4-TTjuByUb8trrmLBvmX7opi7zIcFOmXMQ%3D%3A0 pic=\ /]
下一项工作是....
[vplayer url=https://pan.vinua.cn/api/v3/file/source/6126/%E5%8E%9F%E7%A5%9E%202022-01-27%2016-14-51.mp4?sign=BUXXIOicWZZMQWuhuVDGrGEndbWg3t5DnHoQ-KHZ3lc%3D%3A0 pic=\ /]
LaTeX 公式测试
$$ M = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \end{bmatrix} $$ $$ M = \begin{bmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \end{bmatrix} $$
收缩框测试
cloudflaer cdn速度测试
Goal
In this chapter, we will learn about
- Concept of Canny edge detection
- OpenCV functions for that : cv.Canny()
Theory
Canny Edge Detection is a popular edge detection algorithm. It was developed by John F. Canny in
- It is a multi-stage algorithm and we will go through each stages.
- Noise Reduction
Since edge detection is susceptible to noise in the image, first step is to remove the noise in the image with a 5x5 Gaussian filter. We have already seen this in previous chapters. - Finding Intensity Gradient of the Image
Smoothened image is then filtered with a Sobel kernel in both horizontal and vertical direction to get first derivative in horizontal direction ( Gx) and vertical direction ( Gy). From these two images, we can find edge gradient and direction for each pixel as follows:
Edge_Gradient(G)=G2x+G2y−−−−−−−√Angle(θ)=tan−1(GyGx)
Gradient direction is always perpendicular to edges. It is rounded to one of four angles representing vertical, horizontal and two diagonal directions.
- Non-maximum Suppression
After getting gradient magnitude and direction, a full scan of image is done to remove any unwanted pixels which may not constitute the edge. For this, at every pixel, pixel is checked if it is a local maximum in its neighborhood in the direction of gradient. Check the image below:
Point A is on the edge ( in vertical direction). Gradient direction is normal to the edge. Point B and C are in gradient directions. So point A is checked with point B and C to see if it forms a local maximum. If so, it is considered for next stage, otherwise, it is suppressed ( put to zero).
In short, the result you get is a binary image with thin edges.
- Hysteresis Thresholding
This stage decides which are all edges are really edges and which are not. For this, we need two threshold values, minVal and maxVal. Any edges with intensity gradient more than maxVal are sure to be edges and those below minVal are sure to be non-edges, so discarded. Those who lie between these two thresholds are classified edges or non-edges based on their connectivity. If they are connected to sure-edge pixels, they are considered to be part of edges. Otherwise, they are also discarded. See the image below:
The edge A is above the maxVal, so considered as sure-edge. Although edge C is below maxVal, it is connected to edge A, so that also considered as valid edge and we get that full curve. But edge B, although it is above minVal and is in same region as that of edge C, it is not connected to any sure-edge, so that is discarded. So it is very important that we have to select minVal and maxVal accordingly to get the correct result.
This stage also removes small pixels noises on the assumption that edges are long lines.
So what we finally get is strong edges in the image.
Canny Edge Detection in OpenCV
OpenCV puts all the above in single function, cv.Canny() . We will see how to use it. First argument is our input image. Second and third arguments are our minVal and maxVal respectively. Fourth argument is aperturesize. It is the size of Sobel kernel used for find image gradients. By default it is 3. Last argument is L2gradient which specifies the equation for finding gradient magnitude. If it is True, it uses the equation mentioned above which is more accurate, otherwise it uses this function: Edge**Gradient(G)=|Gx|+|Gy**|. By default, it is False.
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread(\'messi5.jpg\',0)
edges = cv.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = \'gray\')
plt.title(\'Original Image\'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = \'gray\')
plt.title(\'Edge Image\'), plt.xticks([]), plt.yticks([])
plt.show()
See the result below:
Additional Resources
- Canny edge detector at Wikipedia
- Canny Edge Detection Tutorial by Bill Green, 2002.
Exercises
- Write a small application to find the Canny edge detection whose threshold values can be varied using two trackbars. This way, you can understand the effect of threshold values.
Comments 10 条评论
看看评论通过的邮件回复模板咋样
这是一条京东链接
这是一条淘宝链接链接
邮件推送测试…
问题已解决,DNS的MX解析错误,已修复
查看日志发现有一条推送失败,再次测试…
QQ头像自动抓取测试…
@Test QQ头像自动抓取测试…
配置了企业邮箱账户,邮件发送测试…
@Test 博主回复评论推送测试…
更新了发件IP白名单,再次进行邮件测试
邮件通知测试