当前位置: 首页 > news >正文

如何建设好一个公司网站济南网站制作推广

如何建设好一个公司网站,济南网站制作推广,品牌型网站制,电子商务网站建设计划书OpenCV实战系列#xff1a;高通滤波器及其应用 0. 前言1. 检测图像边缘 1.2 Sobel 滤波器1.2 梯度算子1.3 高斯导数 2. 图像拉普拉斯算子 2.1 拉普拉斯算子2.2 使用拉普拉斯算子增强图像的对比度2.3 高斯差 3. 完整代码小结系列链接 0. 前言 在频域分析中#xff0c;滤波器…OpenCV实战系列高通滤波器及其应用 0. 前言1. 检测图像边缘 1.2 Sobel 滤波器1.2 梯度算子1.3 高斯导数 2. 图像拉普拉斯算子 2.1 拉普拉斯算子2.2 使用拉普拉斯算子增强图像的对比度2.3 高斯差 3. 完整代码小结系列链接 0. 前言 在频域分析中滤波器是一种放大图像某些频带同时减少其他频带的操作低通滤波器 (low-pass filters) 是消除图像高频成分的滤波器而高通滤波器 (high-pass filters) 消除图像的低频成分。在《滤波器》一节中已经介绍了[低通滤波器]的实现以及应用在本节中我们介绍另一类重要的滤波器即高通滤波器。 1. 检测图像边缘 在《滤波器》一节中我们已经介绍了如何使用核矩阵进行线性滤波使用低通滤波器通过去除或衰减图像高频分量来模糊图像。在本节中我们将执行相反的变换即放大图像的高频内容介绍高通滤波器用于执行边缘检测。 1.2 Sobel 滤波器 本节主要介绍 Sobel 滤波器它也被称为定向滤波器因为它仅影响垂直或水平图像频率具体取决于使用的滤波器核。 (1) 要在水平方向应用 Sobel 算子使用以下参数调用函数 cv::Mat sobelX; cv::Sobel(image, // 输入sobelX, // 输出CV_8U, // 图像类型1, 0, // 核3, // 核大小0.4, 128); // 缩放和偏移因子(2) 垂直滤波与水平滤波类似可以通过使用以下方式实现 cv::Sobel(image, sobelY, CV_8U, 0, 1, 3, 0.4, 128);生成的输出用 8 位图像 (CV_8U) 表示。水平 Sobel 算子操作结果如下所示 Sobel 算子的核包含正值和负值Sobel 滤波器的结果通常用 16 位有符号整数图像 (CV_16S) 计算为了使结果可显示为 8 位图像我们使用如下表示使用零值对应于灰度级 128负值由较暗的像素表示而正值由较亮的像素表示。垂直 Sobel 算子操作结果如下所示 以上图像类似于照片编辑软件中的浮雕效果实际上浮雕图像转换通常基于方向滤镜完成。 (3) 然后将以上两个结果(垂直和水平 Sobel )进行组合以获得 Sobel 滤波器的范数结果 // 计算 Sobel 范数 cv::Sobel(image, sobelX, CV_16S, 1, 0); cv::Sobel(image, sobelY, CV_16S, 0, 1); cv::Mat sobel; sobel abs(sobelX) abs(sobelY);(4) 使用 convertTo 方法的缩放参数可以在图像中显示 Sobel 范数结果得到的图像中使用零值表示白色像素而较大的值用于表示灰色阴影 double sobmin, sobmax; cv::minMaxLoc(sobel, sobmin, sobmax); // 转换为 8 位图像 cv::Mat sobelImage; sobel.convertTo(sobelImage, CV_8U, -255./sobmax, 255)从上图中可以看出 Sobel 算子被称为边缘检测器的原因对该图像进行阈值处理可以获得图像轮廓的二值图 // 对 Sobel 范数应用阈值 cv::Mat sobelThresholded; cv::threshold(sobelImage, sobelThresholded, 225, 255, cv::THRESH_BINARY);Sobel 算子是一个经典的边缘检测线性滤波器它基于简单的 3x3 核垂直和水平核分别具有以下结构 [ − 1 0 1 − 2 0 2 − 1 0 1 ] [ − 1 − 2 − 1 0 0 0 1 2 1 ] \left[ −1−2−1000121−101−202−101 \begin{array}{ccc} -1 0 1\\ -2 0 2\\ -1 0 1\\\end{array}\right] \left[ −101−202−101−1−2−1000121 \begin{array}{ccc} -1 -2 -1\\ 0 0 0\\ 1 2 1\\\end{array}\right] ​−1−2−1​000​121​ ​ ​−101​−202​−101​ ​ 如果我们将图像视为一个二维函数那么 Sobel 算子就可以看作是图像在垂直和水平方向上的变化的度量。在数学中这种度量称为梯度定义为由函数在两个正交方向上的一阶导数构成的二维向量 g r a d ( I ) [ ∂ I ∂ x , ∂ I ∂ y ] T grad(I)[\frac {\partial I} {\partial x},\frac {\partial I} {\partial y}]^T grad(I)[∂x∂I​,∂y∂I​]T 因此Sobel 算子在水平和垂直方向上计算图像梯度的近似值对目标像素周围的窗口进行操作以减少噪声的影响。cv::Sobel 函数计算图像与 Sobel 核的卷积结果其完整调用形式如下 cv::Sobel(image, // 输入sobel, // 输出image_depth, // 图像类型xorder, yorder, // 指定核kernel_size, // 核尺寸alpha, beta); // 缩放和偏移我们可以将结果写入无符号字符、有符号整数或浮点图像如果结果落在图像像素域之外将应用饱和运算。最后两个参数用于将结果存储在图像中之前将结果缩放(乘以) alpha 并添加偏移量 beta在上一节生成的图像中Sobel 值 0 由中灰度级 128 表示每个 Sobel 掩码对应一个方向的导数因此使用两个参数来指定应用的内核x 和 y 方向的导数阶数例如通过为 xorder 和 yorder 参数指定 1 和 0 来使用水平 Sobel 核将而指定 0 和 1 则使用垂直 Sobel 核我们也可以使用其他组合但这两种是最常用的组合(二阶导数将在下一节中介绍)最后也可以使用其他尺寸的核例如值 1、3、5 和 7大小为 1 的核对应于一维 Sobel 滤波器( 1x3 或 3x1)。 由于梯度是一个二维向量它包含一个范数和一个方向梯度向量的范数表示梯度变化的幅度它通常使用欧几里得范数(也称为 L2 范数)计算 ∣ g r a d ( I ) ∣ ( ∂ I ∂ x ) 2 ( ∂ I ∂ y ) 2 |grad(I)|\sqrt {(\frac {\partial I} {\partial x})^2(\frac {\partial I} {\partial y})^2} ∣grad(I)∣(∂x∂I​)2(∂y∂I​)2 ​ 然而在图像处理中梯度范数通常使用 L1 范数计算(绝对值之和)它可以以更低的计算成本得到接近 L2 范数的计算结果 sobel abs(sobelX)abs(sobelY);梯度向量总是指向变化最陡峭的方向对于图像而言这意味着梯度方向会与边缘正交从较暗的方向指向较亮的方向梯度方向可以使用以下公式计算 a t a n ( g r a d ( I ) ) atan(grad(I)) atan(grad(I)) 大多数情况下对于边缘检测只需要计算范数。但是如果同时需要范数和方向可以使用以下 OpenCV 函数 cv::Sobel(image, sobelX, CV_32F, 1, 0); cv::Sobel(image, sobelY, CV_32F, 0, 1); // 计算梯度的 L2 范数和方向 cv::Mat norm, dir; cv::cartToPolar(sobelX, sobelY, norm, dir);默认情况下方向以弧度计算需添加 true 作为附加参数将弧度制转换为角度值。 通过在梯度幅度上应用阈值可以获得二值边缘图像其关键在于设置合适的阈值。如果阈值太低会保留太多(粗)边缘而如果阈值太高则会得到较多断边。例如下图是使用较高阈值得到的二值边缘图像 可以使用滞后阈值技术获得合适的阈值。也可以在应用微分滤波器之前应用高斯平滑滤波器能够降低噪声影响。接下来我们将介绍一些其他梯度算子。 1.2 梯度算子 为了估计像素位置的梯度Prewitt 算子使用以下矩阵核 [ − 1 0 1 − 1 0 1 − 1 0 1 ] [ − 1 − 1 − 1 0 0 0 1 1 1 ] \left[ −1−1−1000111−101−101−101 \begin{array}{ccc} -1 0 1\\ -1 0 1\\ -1 0 1\\\end{array}\right] \left[ −101−101−101−1−1−1000111 \begin{array}{ccc} -1 -1 -1\\ 0 0 0\\ 1 1 1\\\end{array}\right] ​−1−1−1​000​111​ ​ ​−101​−101​−101​ ​ Roberts 算子基于简单的 2x2 矩阵核 [ 1 0 0 − 1 ] [ 0 1 − 1 0 ] \left[ 100−1100−1 \begin{array}{ccc} 1 0\\ 0 -1\\\end{array}\right] \left[ 0−11001−10 \begin{array}{ccc} 0 1\\ -1 0\\\end{array}\right] [10​0−1​][0−1​10​] 当需要更准确地估计梯度方向时应当首选 Scharr 算子 [ − 3 0 3 − 10 0 10 − 3 0 3 ] [ − 3 − 10 − 3 0 0 0 1 1 1 ] \left[ −3−10−30003103−303−10010−303 \begin{array}{ccc} -3 0 3\\ -10 0 10\\ -3 0 3\\\end{array}\right] \left[ −301−1001−301−3−10−3000111 \begin{array}{ccc} -3 -10 -3\\ 0 0 0\\ 1 1 1\\\end{array}\right] ​−3−10−3​000​3103​ ​ ​−301​−1001​−301​ ​ 通过使用 CV_SCHAR 参数调用 cv::Sobel 函数可以使用 Scharr 核 cv::Sobel(image,sobelX,CV_16S,1,0, CV_SCHARR);或者可以调用 cv::Scharr 函数得到相同的结果 cv::Scharr(image,scharrX,CV_16S,1,0,3);以上这些方向滤波器都可以用于计算图像函数的一阶导数因此在滤波器方向存在大幅度变化的区域会得到较高值而平坦区域得到较低值。基于此我们通常使用高通滤波器计算图像导数。 1.3 高斯导数 微分滤波器是高通滤波器因此它们倾向于放大图像中的噪声和具有高对比度的小细节。为了减少这些高频元素的影响最好在应用微分滤波器之前先平滑图像我们可以组合这两个步骤得到一个平滑核。我们已经知道图像与滤波器的卷积可以表示为项总和根据项总和的导数等于项的导数总和这一性质我们可以不将求导应用于平滑后的结果而是可以首先对核求导然后将其与图像进行卷积。由于高斯核是连续可导的因此是一个合适的选择使用不同的核大小调用 cv::sobel 函数函数将计算具有不同 σ 值的高斯核导数。例如如果我们在 x 方向上选择 7x7 Sobel 滤波器(即 kernel_size7)则可以得到以下结果 如果将此图像与之前结果图像进行比较可以看到许多精细的细节已被删除更加强调重要的边缘。这可以视为一个带通滤波器高斯滤波器去除低频部分Sobel 滤波器去除高频部分。 2. 图像拉普拉斯算子 2.1 拉普拉斯算子 拉普拉斯算子是另一种基于图像导数计算的高通线性滤波器它通过计算二阶导数来测量图像函数的曲率。 OpenCV 函数 cv::Laplacian 用于计算图像的拉普拉斯算子与 cv::Sobel 函数非常相似。它同样使用函数 cv::getDerivKernels 来获取其核矩阵唯一的区别是没有导数阶参数因为根据定义是拉普拉斯算子是二阶导数。 (1) 对于拉普拉斯算子我们创建一个简单的类来封装相关操作 class LaplacianZC {private:cv::Mat laplace;// 拉普拉斯核尺寸int aperture;public:LaplacianZC() : aperture(3) {}void setAperture(int a) {aperture a;}int getAperture() const {return aperture;}cv::Mat computeLaplacian(const cv::Mat image) {// 计算拉普拉斯cv::Laplacian(image, laplace, CV_32F, aperture);return laplace;}(2) 此处拉普拉斯算子的计算是在浮点图像上完成的。为了获得结果的图像我们需要重新对其进行缩放重新缩放基于拉普拉斯最大绝对值其中为值 0 分配的灰度值强度为 128 // 使用 8 位图像展示拉普拉斯结果 cv::Mat getLaplacianImage(double scale-1.0) {if (scale0) {double lapmin, lapmax;cv::minMaxLoc(laplace, lapmin, lapmax);scale 127/std::max(-lapmin, lapmax);}cv::Mat laplaceImage;laplace.convertTo(laplaceImage, CV_8U, scale, 128);return laplaceImage; }(3) 使用 LaplacianZC 类使用 7x7 核计算拉普拉斯图像 // 使用 LaplacianZC 计算拉普拉斯 LaplacianZC laplacian; laplacian.setAperture(7); cv::Mat flap laplacian.computeLaplacian(image); double lapmin, lapmax; cv::minMaxLoc(flap, lapmin, lapmax); laplace laplacian.getLaplacianImage();生成的图像如下图所示 形式上二维函数的拉普拉斯算子定义为其二阶导数之和 l a p l a c i a n ( I ) ( ∂ I ∂ x ) 2 ( ∂ I ∂ y ) 2 laplacian(I)\sqrt {(\frac {\partial I} {\partial x})^2(\frac {\partial I} {\partial y})^2} laplacian(I)(∂x∂I​)2(∂y∂I​)2 ​ 在简单形式中可以用以下 3x3 核来近似 [ 0 1 0 1 − 4 1 0 1 0 ] \left[ 0101−410100101−41010 \begin{array}{ccc} 0 1 0\\ 1 -4 1\\ 0 1 0\\\end{array}\right] ​010​1−41​010​ ​ 与 Sobel 算子一样可以使用更大的核来计算拉普拉斯算子并且由于该算子对图像噪声更加敏感因此最好使用更大的核除非更加追求计算效率。由于这些较大的核是使用高斯函数的二阶导数计算的因此相应的算子通常称为高斯拉普拉斯算子 (Laplacian of Gaussian, LoG)拉普拉斯算子的核值总和为 0这确保了拉普拉斯算子在强度恒定的区域为零。实际上由于拉普拉斯算子用于测量图像函数的曲率因此在平坦区域它应该等于 0。 乍一看拉普拉斯算子的效果可能难以解释。从核的定义来看孤立的像素值(即与其相邻像素具有较大差异的值)都会被算子放大。这是算子对噪声高度敏感的结果接下来观察图像中边缘周围的拉普拉斯值图像中边缘的存在是不同灰度强度区域之间快速过渡的结果随着图像函数沿边缘的变化(例如由从暗到亮的过渡引起))可以观察到灰度提升必然意味着从正曲率逐渐过渡(当强度值开始上升时)到负曲率(当强度即将达到其顶峰时)因此正负拉普拉斯值之间的过渡构成了边缘存在的良好指标或者说边缘位于拉普拉斯函数的正负值交叉处。我们通过在测试图像的一个小窗口中查看拉普拉斯算子的值来证明这一想法选择观察图像中人物头发区域在下图中绘制边界框以显示此感兴趣区域 (region of interest, ROI) 的确切位置 查看此窗口内的 Laplacian 值( 7x7 核)可以得到以下结果 如图所示如果连接拉普拉斯算子的正负交叉点(位于不同符号的像素之间)可以得到一条与图像中边缘相对应的曲线。在上图中我们沿着正负交叉点绘制虚线这意味着我们甚至可以以亚像素精度检测图像边缘。 连接拉普拉斯图像中的正负交叉曲线是一项复杂任务但也可以使用简化的算法来检测近似的交叉位置首先将拉普拉斯算子的阈值设置为 0以得到正值和负值之间的分区两个分区之间的轮廓则对应于交叉点。因此我们使用形态学操作来提取这些轮廓即从 Laplacian 图像中减去膨胀图像生成二值图像 // 获取二值图像 cv::Mat getZeroCrossings(cv::Mat laplace) {// 阈值为 0cv::Mat signImage;cv::threshold(laplace, signImage, 0, 255, cv::THRESH_BINARY);// 将图像转换为 CV_8U 类型cv::Mat binary;signImage.convertTo(binary, CV_8U);// 膨胀二值图像cv::Mat dilated;cv::dilate(binary, dilated, cv::Mat());return dilated-binary; }程序运行结果如下所示 可以看到拉普拉斯算子能够检测所有边缘无论是强边缘还是弱边缘。由于拉普拉斯算子对噪声非常敏感因此其中一些边缘是由于压缩伪影造成的这解释了为什么此算子会检测到如此多的边缘。在实践中拉普拉斯算子可以与其他算子结合使用来检测边缘此外拉普拉斯算子和其他二阶算子可以用于检测多尺度兴趣点。 拉普拉斯算子是一种高通滤波器可以通过使用低通滤波器的组合得到近似结果。 2.2 使用拉普拉斯算子增强图像的对比度 可以通过从图像中减去其拉普拉斯算子来增强图像的对比度正如我们在操作像素中使用邻居访问扫描图像的方法中进行的操作其核如下所示 [ 0 1 0 1 − 5 1 0 1 0 ] \left[ 0101−510100101−51010 \begin{array}{ccc} 0 1 0\\ 1 -5 1\\ 0 1 0\\\end{array}\right] ​010​1−51​010​ ​ 2.3 高斯差 高斯滤波器可以从图像中提取低频且高斯滤波器滤波的频率范围取决于参数 σ该参数控制滤波器的宽度。如果我们减去由两个不同带宽的高斯滤波器对图像进行滤波所产生的两个图像那么生成的图像将由能保留较高频率的滤波器组成此操作称为高斯差分 (Difference of Gaussians, DoG) cv::GaussianBlur(image, gauss20, cv::Size(), 2.0); cv::GaussianBlur(image, gauss22, cv::Size(), 2.2); // 计算 DoG cv::subtract(gauss22, gauss20, dog, cv::Mat(), CV_32F); // 显示 DoG 正负交叉点 zeros laplacian.getZeroCrossings(dog);此外我们还可以计算 DoG 算子的交叉点得到以下结果 可以证明通过正确选择 σ 值DoG 算子可以近似 LoG 滤波器的结果。此外如果根据 σ 值递增序列中的连续对值计算一系列高斯差分可以获得图像的尺度空间表示这种多尺度表示在尺度不变的图像特征检测等方面应用广泛。 3. 完整代码 头文件 (laplacianZC.h) 完整代码如下 #if !defined LAPLACEZC #define LAPLACEZ#include opencv2/core/core.hpp #include opencv2/imgproc/imgproc.hppclass LaplacianZC {private:cv::Mat laplace;// 拉普拉斯核尺寸int aperture;public:LaplacianZC() : aperture(3) {}void setAperture(int a) {aperture a;}int getAperture() const {return aperture;}cv::Mat computeLaplacian(const cv::Mat image) {// 计算拉普拉斯cv::Laplacian(image, laplace, CV_32F, aperture);return laplace;}// 使用 8 位图像展示拉普拉斯结果cv::Mat getLaplacianImage(double scale-1.0) {if (scale0) {double lapmin, lapmax;cv::minMaxLoc(laplace, lapmin, lapmax);scale 127/std::max(-lapmin, lapmax);}cv::Mat laplaceImage;laplace.convertTo(laplaceImage, CV_8U, scale, 128);return laplaceImage;}// 获取二值图像cv::Mat getZeroCrossings(cv::Mat laplace) {// 阈值为 0cv::Mat signImage;cv::threshold(laplace, signImage, 0, 255, cv::THRESH_BINARY);// 将图像转换为 CV_8U 类型cv::Mat binary;signImage.convertTo(binary, CV_8U);// 膨胀二值图像cv::Mat dilated;cv::dilate(binary, dilated, cv::Mat());return dilated-binary;} };#endif主函数文件 (derivatives.cpp) 完整代码如下所示 #include iostream #include iomanip #include opencv2/core/core.hpp #include opencv2/imgproc/imgproc.hpp #include opencv2/highgui/highgui.hpp #include laplacianZC.hint main() {// 读取图像cv::Mat image cv::imread(3.png, 0);if (!image.data) return 0;cv::namedWindow(Original Image);cv::imshow(Original Image,image);// 计算 Sobel x 方向导数cv::Mat sobelX;cv::Sobel(image, // 输入sobelX, // 输出CV_8U, // 图像类型1, 0, // 核3, // 核大小0.4, 128); // 缩放和偏移因子cv::namedWindow(Sobel X Image);cv::imshow(Sobel X Image, sobelX);// 计算 Sobel y 方向导数cv::Mat sobelY;cv::Sobel(image, sobelY, CV_8U, 0, 1, 3, 0.4, 128);cv::namedWindow(Sobel Y Image);cv::imshow(Sobel Y Image,sobelY);// 计算 Sobel 范数cv::Sobel(image, sobelX, CV_16S, 1, 0);cv::Sobel(image, sobelY, CV_16S, 0, 1);cv::Mat sobel;sobel abs(sobelX) abs(sobelY);double sobmin, sobmax;cv::minMaxLoc(sobel, sobmin, sobmax);std::cout sobel value range: sobmin sobmax std::endl;// 计算 Sobel x 方向导数 (7x7)cv::Sobel(image, sobelX, CV_8U, 1, 0, 7, 0.001, 128);cv::namedWindow(Sobel X Image (7x7));cv::imshow(Sobel X Image (7x7), sobelX);// 打印窗口像素for (int i0; i12; i) {for (int j0; j12; j) {std::cout std::setw(5) static_castint(sobel.atshort(i79, j125)) ;}std::cout std::endl;}std::cout std::endl std::endl std::endl;// 转换为 8 位图像cv::Mat sobelImage;sobel.convertTo(sobelImage, CV_8U, -255./sobmax, 255);cv::namedWindow(Sobel Image);cv::imshow(Sobel Image,sobelImage);// 对 Sobel 范数应用阈值cv::Mat sobelThresholded;cv::threshold(sobelImage, sobelThresholded, 225, 255, cv::THRESH_BINARY);cv::namedWindow(Binary Sobel Image (low));cv::imshow(Binary Sobel Image (low), sobelThresholded);cv::threshold(sobelImage, sobelThresholded, 190, 255, cv::THRESH_BINARY);cv::namedWindow(Binary Sobel Image (high));cv::imshow(Binary Sobel Image (high), sobelThresholded);// 计算 3x3 拉普拉斯算子cv::Mat laplace;cv::Laplacian(image, laplace, CV_8U, 1, 1, 128);cv::namedWindow(Laplacian Image);cv::imshow(Laplacian Image,laplace);int cx(238), cy(90);int dx(12), dy(12);// 提取较小窗口cv::Mat window(image, cv::Rect(cx, cy, dx, dy));cv::namedWindow(Image window);cv::imshow(Image window, window);cv::imwrite(window.png, window);// 使用 LaplacianZC 计算拉普拉斯LaplacianZC laplacian;laplacian.setAperture(7);cv::Mat flap laplacian.computeLaplacian(image);double lapmin, lapmax;cv::minMaxLoc(flap, lapmin, lapmax);laplace laplacian.getLaplacianImage();cv::namedWindow(Laplacian Image (7x7));cv::imshow(Laplacian Image (7x7), laplace);// 打印图像值std::cout std::endl;std::cout Image values: std::endl std::endl;for (int i0; idx; i) {for (int j0; jdy; j) {std::cout std::setw(5) static_castint(image.atuchar(icy, jcx)) ;}std::cout std::endl;}std::cout std::endl;// 打印拉普拉斯值std::cout Laplacian value range[ lapmin , lapmax ];std::cout std::endl std::endl;for (int i0; idx; i) {for (int j0; jdy; j) {std::cout std::setw(5) static_castint(flap.atfloat(icy, jcx)/100) ;}std::cout std::endl;}std::cout std::endl;// 计算并显示正负交叉点cv::Mat zeros;zeros laplacian.getZeroCrossings(flap);cv::namedWindow(Zero-crossings);cv::imshow(Zero-crossings, 255-zeros);// 打印窗口像素值std::cout Zero values: std::endl std::endl;for (int i0; idx; i) {for (int j0; jdy; j) {std::cout std::setw(2) static_castint(zeros.atuchar(i cy, j cx))/255 ;}std::cout std::endl;}// 图像上采样和下采样cv::Mat reduced, rescaled;cv::pyrDown(image, reduced);cv::pyrUp(reduced, rescaled);cv::namedWindow(Rescaled Image);cv::imshow(Rescaled Image,rescaled);// 计算 DoG 金字塔cv::Mat dog;cv::subtract(rescaled, image, dog, cv::Mat(), CV_16S);cv::Mat dogImage;dog.convertTo(dogImage, CV_8U, 1.0, 128);cv::namedWindow(DoG Image (from pyrdown/pyrup));cv::imshow(DoG Image (from pyrdown/pyrup),dogImage);// 应用两次高斯滤波cv::Mat gauss05;cv::Mat gauss15;cv::GaussianBlur(image, gauss05, cv::Size(), 0.5);cv::GaussianBlur(image, gauss15, cv::Size(), 1.5);// 计算 DoGcv::subtract(gauss15, gauss05, dog, cv::Mat(), CV_16S);dog.convertTo(dogImage, CV_8U, 2.0, 128);cv::namedWindow(DoG Image);cv::imshow(DoG Image,dogImage);// 应用两次高斯滤波cv::Mat gauss20;cv::Mat gauss22;cv::GaussianBlur(image, gauss20, cv::Size(), 2.0);cv::GaussianBlur(image, gauss22, cv::Size(), 2.2);// 计算 DoGcv::subtract(gauss22, gauss20, dog, cv::Mat(), CV_32F);dog.convertTo(dogImage, CV_8U, 10.0, 128);cv::namedWindow(DoG Image (2));cv::imshow(DoG Image (2),dogImage);// 显示 DoG 正负交叉点zeros laplacian.getZeroCrossings(dog);cv::namedWindow(Zero-crossings of DoG);cv::imshow(Zero-crossings of DoG, 255-zeros);cv::rectangle(image, cv::Rect(cx, cy, dx, dy), cv::Scalar(255, 255, 255));cv::namedWindow(Original Image with window);cv::imshow(Original Image with window, image);cv::waitKey();return 0; }小结 在信号处理领域高通滤波器指的是允许高于某一阈值的频率信息通过过滤掉低于这一阈值的频率信息从而大大衰减低频率的一种滤波器。在图像处理中高通滤波器 (high-pass filters) 用于消除图像的低频成分获取图像边缘。本节中介绍了高通滤波器的基本概念并利用高通滤波器实现了图像边缘检测。 转https://blog.csdn.net/LOVEmy134611/article/details/128794797
http://www.dnsts.com.cn/news/207200.html

相关文章:

  • 厦门市建设管理协会网站首页河北地图
  • 免费领手机 网站微信公众号排版编辑
  • 建站运营新闻百度搜索一下
  • 电商网站设计公司排行榜wordpress列表显示标签
  • 物流商 网站建设方案中国世界排名前100名的大学
  • 环保网站设计是什么太原seo排名
  • 网站制作案例市场品牌建设成绩
  • 做学历的网站自己制作手机app
  • 怎么导入网站源码wordpress备案号代码
  • 培训网站建设课程团购网站模板免费下载
  • 外贸网站域名能用cn做后缀吗网站开发工具软件
  • 教育网站开发文档模板网站如何建设与安全
  • app手机端电子商务网站功能网站源码怎么获取
  • 推广型的网站怎么做廊坊论坛网站建设
  • 网站建设 天佑互联做网站需要会什么编程
  • 安徽网站建设推荐搜索引擎收录查询
  • 包头怎样做网站沪上装修排名前十有哪些品牌
  • 手机wap网站导航模板千瓜数据
  • 企业网站模板建站怎样自己创网站
  • 物联网开发企业seo蜘蛛屯
  • 网站前台设计过程郑州比较大的网络公司
  • aspcms网站使用教程搜狗推广和百度推广哪个好
  • 武威建设网站的网站上海网站建设q479185700強
  • 关于电商网站建设与管理的书籍太原软件行业
  • 网站建设 域名做一个小程序要花多少钱
  • 比较好的做网站的公司书店网站网站建设规划书
  • 网站前置审批项成都专业做婚恋网站的网络科技公司
  • 想做网站选什么专业seo排名网
  • 商务网站建设策划书2000字省直部门门户网站建设
  • 有多少专门做兼职的网站户县建设局网站