sobel算子求梯度方向计算梯度为什么会产生噪声

索贝尔算子(Sobeloperator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量
Sobel卷积因子为:
该算子包含两组3x3的矩阵,分别为横向及纵向,将之与图像作平面卷积,即可分别得出横向及纵向的亮度差分近似值。如果以A代表原始图像,Gx及Gy分别代表经横向及纵向边缘检测的图像灰度值,其公式如下:
具体计算如下:
图像的每一个像素的横向及纵向灰度值通过以下公式结合,来计算该点灰度的大小:
通常,为了提高效率使用不开平方的近似值:
然后可用以下公式计算梯度方向:
若图像为:&
则使用近似公式的计算的结果为:
Sobel算子另一种形式是各向同性Sobel(Isotropic Sobel)算子,也有两个,一个是检测水平边沿的,另一个是检测垂直边沿的 。各向同性Sobel算子和普通Sobel算子相比,它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致。将Sobel算子矩阵中的所有2改为根号2,就能得到各向同性Sobel的矩阵。
  由于Sobel算子是滤波算子的形式,用于提取边缘,可以利用快速卷积函数, 简单有效,因此应用广泛。美中不足的是,Sobel算子并没有将图像的主体与背景严格地区分开来,即Sobel算子没有严格地模拟人的视觉生理特征,所以提取的图像轮廓有时并不能令人满意。
除此之外:由于基础核具有关于0,0,0所在的中轴正负对称,所以通过对基础核的旋转,和图像做卷积,可以获得灰度图的边缘图,同时消去旋转角方向+180°上的边缘,迭代多个方向即可消去多个方向的边缘,但是为消去的边缘会加倍。
<span style="color:#°
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
旋转后的核(顺时针为正)
<span style="color:#°
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#0°
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
&&&&&&&&&&&&&&&&&&
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
<span style="color:#
&&&&&&&&&&&&&&&&
&结果图如下,按0°,45°,90°,135°,180°,225°,270°排序
代码如下:
#include &cv.h&
#include &cxmisc.h&
#include &highgui.h&
#include &vector&
#include &string&
#include &algorithm&
#include &stdio.h&
#include &ctype.h&
#pragma comment(lib, &G:\\OpenCV-2.1.0\\vc2008\\lib\\cxcore210d.lib&)
#pragma comment(lib, &G:\\OpenCV-2.1.0\\vc2008\\lib\\cv210d.lib&)
#pragma comment(lib, &G:\\OpenCV-2.1.0\\vc2008\\lib\\highgui210d.lib&)
//对不同深度图片和较大的图片进行放缩,以至于可以在显示器上完全显示
void ShowConvertImage(char name[200],IplImage* Image)
&cvNamedWindow(name,1);
&char savename[350];
&sprintf(savename,&%s.jpg&,name);
&cvSaveImage(savename,Image);
&&& if(Image-&width&1280)
&&if(Image-&depth!=IPL_DEPTH_8U)
&&& IplImage* NormalizeImage=NULL;
&&& NormalizeImage=cvCreateImage(cvGetSize(Image),IPL_DEPTH_8U,1);
&&& cvConvertScale(Image,NormalizeImage,1,0);//将图转为0-256,用于图片显示,
&&& cvShowImage(name,NormalizeImage);
&&&&&&&&&&&& cvReleaseImage(&NormalizeImage);
&&&&&&&&&&&& cvShowImage(name,Image);
& IplImage* ImageResize=cvCreateImage(cvSize(1280,Image-&height/(Image-&width/1280)),Image-&depth ,Image-&nChannels);
& cvResize(Image,ImageResize,1);
&&&& if(ImageResize-&depth!=IPL_DEPTH_8U)
&&& IplImage* NormalizeImage=NULL;
&&& NormalizeImage=cvCreateImage(cvGetSize(ImageResize),IPL_DEPTH_8U,1);
&&& cvConvertScale(Image,NormalizeImage,1,0);//将图转为0-256,用于图片显示,
&&& cvShowImage(name,NormalizeImage);
&&&&&&&&&&&& cvReleaseImage(&NormalizeImage);
&&&&&&&&&&&& cvShowImage(name,ImageResize);
& cvReleaseImage(&ImageResize);
//对较大的图片缩放,不然显示器分辨率不支持,只能部分显示,具体见
int MaxImageWidth=2650;
float Scale=1;
int MinPicWidth=640;
int MinPicHeight=428*MinPicWidth/640;
int Maxradius_self=68*MinPicWidth/640;
int Minradius_self=50*MinPicWidth/640;
int Radius_dist=20*MinPicWidth/640;
int MaxPicWidth=MinPicWidth*S
int MaxPicHeight=MinPicHeight*S
void main()
&&& IplImage * pictemp=NULL;
&&& IplImage * pic=NULL;
&&& char *imgpath=&12.jpg&;&
&&& pictemp=cvLoadImage(imgpath,-1);///获取图片,原色获取
&//pictemp=cvLoadImage(&IMG_02071.jpg&,-1);///获取图片,原色获取
&&& /////////////////改变图片的像素大小
&if(pic!=NULL)
&&cvReleaseImage(&pic);
&if(pictemp-&width&MaxImageWidth)
&&&& pic=cvCreateImage(cvSize(MaxPicWidth,MaxPicHeight),pictemp-&depth ,3);
&&&& cvResize(pictemp,pic,CV_INTER_AREA );
&&& pic=cvCloneImage(pictemp);
&&& ShowConvertImage(&pic&,pic);
&&& cvReleaseImage(&pictemp);
&IplImage * Gray_pic=cvCreateImage(cvGetSize(pic),pic-&depth ,1);
&cvCvtColor(pic,Gray_pic, CV_BGR2GRAY );&&& //////将Image变成灰度图片保存在gray中
&cvCanny(Gray_pic,Gray_pic,50,150,3);
&&& IplImage * Result_pic=cvCreateImage(cvGetSize(pic),IPL_DEPTH_16S ,1);
&& // IplImage * Result_pic=cvCreateImage(cvGetSize(pic),IPL_DEPTH_8U ,1);
&CvMat *kernel=cvCreateMat(3,3,CV_32FC1);
&///卷积核的初始化
&////90度模板卷积核
&&& cvSetReal2D(kernel,0,0, 1);& cvSetReal2D(kernel,0,1, 2); cvSetReal2D(kernel,0,2, 1);
&&& cvSetReal2D(kernel,1,0, 0);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2, 0);
&cvSetReal2D(kernel,2,0,-1);& cvSetReal2D(kernel,2,1,-2); cvSetReal2D(kernel,2,2,-1);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果90°&,Result_pic);
&////225度模板卷积核
&&& cvSetReal2D(kernel,0,0, 2);& cvSetReal2D(kernel,0,1, 1); cvSetReal2D(kernel,0,2, 0);
&&& cvSetReal2D(kernel,1,0, 1);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2,-1);
&cvSetReal2D(kernel,2,0, 0);& cvSetReal2D(kernel,2,1,-1); cvSetReal2D(kernel,2,2,-2);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果225°&,Result_pic);
&////180度模板卷积核
&&& cvSetReal2D(kernel,0,0, 1);& cvSetReal2D(kernel,0,1, 0); cvSetReal2D(kernel,0,2,-1);
&&& cvSetReal2D(kernel,1,0, 2);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2,-2);
&cvSetReal2D(kernel,2,0, 1);& cvSetReal2D(kernel,2,1, 0); cvSetReal2D(kernel,2,2,-1);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果180°&,Result_pic);
&////135度模板卷积核
&&& cvSetReal2D(kernel,0,0, 0);& cvSetReal2D(kernel,0,1,-1); cvSetReal2D(kernel,0,2,-2);
&&& cvSetReal2D(kernel,1,0, 1);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2,-1);
&cvSetReal2D(kernel,2,0, 2);& cvSetReal2D(kernel,2,1, 1); cvSetReal2D(kernel,2,2, 0);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果135°&,Result_pic);
&//90度模板卷积核
&&& cvSetReal2D(kernel,0,0,-1);& cvSetReal2D(kernel,0,1,-2); cvSetReal2D(kernel,0,2,-1);
&&& cvSetReal2D(kernel,1,0, 0);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2, 0);
&cvSetReal2D(kernel,2,0, 1);& cvSetReal2D(kernel,2,1, 2); cvSetReal2D(kernel,2,2, 1);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果90°&,Result_pic);
&////45度模板卷积核
&&& cvSetReal2D(kernel,0,0,-2);& cvSetReal2D(kernel,0,1,-1); cvSetReal2D(kernel,0,2, 0);
&&& cvSetReal2D(kernel,1,0,-1);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2, 1);
&cvSetReal2D(kernel,2,0, 0);& cvSetReal2D(kernel,2,1, 1); cvSetReal2D(kernel,2,2, 2);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果45°&,Result_pic);
&////0度模板卷积核
&&& cvSetReal2D(kernel,0,0,-1);& cvSetReal2D(kernel,0,1, 0); cvSetReal2D(kernel,0,2, 1);
&&& cvSetReal2D(kernel,1,0,-2);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2, 2);
&cvSetReal2D(kernel,2,0,-1);& cvSetReal2D(kernel,2,1, 0); cvSetReal2D(kernel,2,2, 1);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(1,1));
&&& ShowConvertImage(&卷积结果0°&,Result_pic);
&//315度模板卷积核
&&& cvSetReal2D(kernel,0,0, 0);& cvSetReal2D(kernel,0,1, 1); cvSetReal2D(kernel,0,2, 2);
&&& cvSetReal2D(kernel,1,0,-1);& cvSetReal2D(kernel,1,1, 0); cvSetReal2D(kernel,1,2, 1);
&cvSetReal2D(kernel,2,0,-2);& cvSetReal2D(kernel,2,1,-1); cvSetReal2D(kernel,2,2, 0);
&////////////进行卷积核计算
&cvFilter2D(Gray_pic,Result_pic,kernel,cvPoint(-1,-1));
&&& ShowConvertImage(&卷积结果315&,Result_pic);
&cvSobel(Gray_pic,Result_pic,0,1,3);
&ShowConvertImage(&Sobel结果X=0,Y=1&,Result_pic);
&cvSobel(Gray_pic,Result_pic,0,2,3);
&ShowConvertImage(&Sobel结果X=0,Y=2&,Result_pic);
&cvSobel(Gray_pic,Result_pic,1,0,3);
&ShowConvertImage(&Sobel结果X=1,Y=0&,Result_pic);
&cvSobel(Gray_pic,Result_pic,1,1,3);
&ShowConvertImage(&Sobel结果X=1,Y=1&,Result_pic);
&cvSobel(Gray_pic,Result_pic,1,2,3);
&ShowConvertImage(&Sobel结果X=1,Y=2&,Result_pic);
&cvSobel(Gray_pic,Result_pic,2,0,3);
&ShowConvertImage(&Sobel结果X=2,Y=0&,Result_pic);
&cvSobel(Gray_pic,Result_pic,2,1,3);
&ShowConvertImage(&Sobel结果X=2,Y=1&,Result_pic);
&cvSobel(Gray_pic,Result_pic,2,2,3);
&ShowConvertImage(&Sobel结果X=2,Y=2&,Result_pic);
&cvWaitKey(0);
&&& cvReleaseImage(&Result_pic);
&cvReleaseImage(&Gray_pic);
&cvReleaseImage(&pic);
&cvReleaseMat(&kernel);
本文已收录于以下专栏:
相关文章推荐
由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法。
&#160;&#160;&#160;&#160;首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基础是这样的,如果出现一个边缘,那么图像的灰度就会有一定的...
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de...
sobel算子是什么在图像处理上,算子一般也可以认为是滤波器filter,滤波器就是在一个像素点上对它进行与邻域之间的运算。如中值滤波,就是在以像素点为中心,上下左右左上左下右上右下为邻域的集合里,如...
凭据无法工作
近来远程连接实验室的电脑,总是提示“之前用于连接到 *********的凭据无法工作。请输入新凭据”
(图片来自网络:/question...
NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边缘检测、目标检测等。这里主要以人脸检测中的应用为例,来说明NMS,并给出Matl...
邻域滤波(卷积)
邻域算子值利用给定像素周围像素的值决定此像素的最终输出。如图左边图像与中间图像卷积禅城右边图像。目标图像中绿色的像素由原图像中蓝色标记的像素计算得到。
通用线性邻...
Sobel算子&#160;
一、Sobel边缘检测算子
l&#160;在讨论边缘算子之前,首先给出一些术语的定义:
l&#160;(1)边缘:灰度或结构等信息的突变处,边缘是一个区域的结束,也是另一个区域的开始...
08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活。此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/de...
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Sobel梯度算子的使用与分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Sobel梯度算子的使用与分析
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢503 Service Temporarily Unavailable
503 Service Temporarily Unavailable
openresty/1.9.7.4Sobel算子,最全面的Sobel算子文章 - 电子工程世界网
在电子工程世界为您找到如下关于“Sobel算子”的新闻
Sobel算子资料下载
基于SystemGenerator的图像边缘检测,分别有三种检测模式Sobel,Laplace以及Gauss—Laplace算子方式。成功在XilinxFPGA上验证,附带网表。10.1_ImageEdgeDetec\\10.1.4_Sobel\\SobelSim\\coins.png...
在医学图像中,在相对较小的区域内图像频率的陡峭变化反映了目标对象的边缘信息,基于Sobel 算子的梯度向量操作对低噪声的医学图像的边缘提取效果较好,采用Java技术提供的JAI 函数能轻松实现法医脾细胞图像的边缘检测,实验结果表明图像中的边缘能有效地被检测到。在医学图像处理技术中,边缘检测技术被广泛的应用于病灶或组织等的边缘检测,它是图像测量、图像分割、图像压缩以及模式识别等图像处理技术的基础...
目前,被广泛使用的经典边缘检测算子有Sobel算子,Prewitt算子,Roberts算子,Log算子,Canny算子等等。这些算子的核心思想是图像的边缘点是相对应于图像灰度值梯度的局部极大值点。然而,当图像中含有噪声时这些算子对噪声都比较敏感,使得将噪声作为边缘点。由于噪声的干扰,不能检测出真正的边缘。一个拥有良好属性的的边缘检测算法是每个研究者的追求。利用小波交换的特点,设计了三次B样条平滑...
期刊论文:基于Sobel算子数字图像的边缘检测...
·期刊论文:基于Sobel算子数字图像的边缘检测...
利用sobel算子和霍夫变换求出图像的边缘,并计算图像边缘间距离,采用matlab处理...
的,因此边缘模糊是影响条码识别的重要因素。边缘可以被定义为在局部区域内图像特征的差别,它表现为图像上的不连续性。传统的条码边缘检测算法[3-4]是先对条码信号进行一阶差分,然后找出条码图象的边界位置。目前边缘检测的方法很多,传统的方法是采用边缘检测算子求解二维实函数的梯度,然后再选取合适的阈值以提取边缘,这些经典的边缘检测算子主要有:Roberts 算子,Prewitt 算子,Sobel 算子...
本程序是用C语言编写的CANNY算子比以往的SOBEL算子更细。...
基于SOBEL算子的边缘检测,基于EDA技术的图像边缘检测协处理器的设计……...
利用sobel算子进行图像的边缘检测,轮廓提取,可以用于运动目标的检测...
Sobel算子相关帖子
图像分析一、本节提供的函数描述,通常应用于图像分析应用。图像边界和周长函数
& & 边界和周界函数,即IMG_boundary和IMG_perimetcr两个函数。它们通常在结构视觉应用中作为结构算子。IMG_boundary_8IMG_boundary_16sIMG_perimeter_8IMG_perimeter_16
形态学操作函数
& &nbsp...
;&&自己写的简陋算法,只适用于矩形
边缘检测(我对本工程最喜欢的一部分)
& && &&&采用Sobel算子,网上看到的数学公式几乎看不懂,其实代码也就几个for循环
& && &&&实际上本工程不太需要计算灰度,为了多点素材顺便做了类似...
各位大虾:
& & 请教sobel算子在DSP/BIOS上是如何配置的呀?还有它的源程序要作哪些修改啊?先谢谢各位了,感激不尽··· 关于sobel算子在DSP/BIOS上实现...
Sobel算子视频
你可能感兴趣的标签
热门资源推荐做了sobel的实现,比较现有函数,发现自己的问题。
3*3的sobel为:[[1,2,1],[0,0,0],[-1,-2,-1]]/8和它的转置矩阵。
为什么除以8不是4呢,我猜是因为隐含了(求导1&#43;求导2)/2的变换。比如3*3的图形,求正中间像素的梯度,有[(A[0][1]-A[1][1])&#43;(A[1][1]-A[2][1])]/2。
所以得出整体除以8作为梯度&#20540;。
视线中的问题和学到的:1、cv2.filter2D做的其实是相关,不是卷积
& & 2、用astype做负浮点数的变换(到np.uint8),会做类&#20284;缩放,把整个二维数组映射到(-255,255)
& & 3、导致cv2.Sobel是灰的,我的图是黑白。。。
所以,我把sobel算子和原图做了相关后,加了128,这样和官方的效果差不多了。不过y图的好像反了,不过关系不大。
import cv2
import numpy as np
import matplotlib.pyplot as plt
pic=cv2.imread(&C:\\Users\\acer\\Pictures\\book.jpg&)
pic_float=pic.astype(np.float)
pic1=cv2.cvtColor(pic, cv2.COLOR_RGB2GRAY)
edge=cv2.Canny(pic1,80,170)
#cv2.imshow(&GRAY&,pic1)
#cv2.imshow(&EDGE&,edge)
pic1=pic1.astype(np.float)
sobelx=cv2.Sobel(pic1,cv2.CV_64F,1,0,ksize=3)
sobely=cv2.Sobel(pic1,cv2.CV_64F,0,1,ksize=3)
kernel=np.array([[1.0,2.0,1.0],[2.0,4.0,2.0],[1.0,2.0,1.0]])/16
kernelx=np.array([[-1.0,0.0,1.0],[-2.0,0.0,2.0],[-1.0,0.0,1.0]])/8
kernely=np.array([[1.0,2.0,1.0],[0.0,0.0,0.0],[-1.0,-2.0,-1.0]])/8
pic1=cv2.filter2D(pic1,-1,kernel)
my_sobelx=cv2.filter2D(pic1,-1,kernelx)+128
my_sobely=cv2.filter2D(pic1,-1,kernely)+128
my_sobelx=my_sobelx.astype(np.uint8)
my_sobely=my_sobely.astype(np.uint8)
plt.subplot(2,2,1)
plt.imshow(sobelx,cmap='gray')
plt.title('X'),plt.xticks([1,2]),plt.yticks([3,4])
plt.subplot(2,2,2)
plt.imshow(sobely,cmap='gray')
plt.title('Y'),plt.xticks([]),plt.yticks([])
plt.subplot(2,2,3)
plt.imshow(my_sobelx,cmap='gray')
plt.title('MY_X'),plt.xticks([1,2]),plt.yticks([3,4])
plt.subplot(2,2,4)
plt.imshow(my_sobely,cmap='gray')
plt.title('MY_Y'),plt.xticks([]),plt.yticks([])
plt.show()
错的图(没加128)
改正后的图(放大一部分,清楚点,y图是反的)
本文已收录于以下专栏:
相关文章推荐
索贝尔算子(Sobeloperator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量
源图像如下图所示:
下面是各种方法的运算结果:
差分运算法-详细博文链接:http://blog.csdn.net/wenhao_ir/article/details/
找到Opencv的安装目录,例如我的安装目录在F盘,找到相应的安装目录如下所示
可以看到上图中有两个目录文件夹,而我们要找的源代码就在source这个文件夹下...
本文转帖自
.cn/s/blog_4bdbec750100mufo.html
&#160;&#160;&#160;&#160;首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基...
sobel算子是一种常用的边缘检测算子,是一阶的梯度算法。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。它进行处理的模板如下...
Sobel边缘检测算子
纯粹阅读,请移步OpenCV使用Sobel滤波器实现图像边缘检测效果图源码KqwOpenCVFeaturesDemoSobel滤波器也叫Sobel算子,与Canny边缘检测一样,需要计算像素的灰度梯度...
对于一幅图像,假设图像为全白,但是中间有一条黑色的垂直的直线。那么直线所在的位置有何特征呢?
&#160; &#160; &#160; &#160;稍微想想便可以知道,在直线的左边为全白,那么从图像最左边至中间黑色的直线,其像素点的灰度变化...
声明:虽然肯定没人看,但是我要说明,里面的内容都是我从官方文档上抄的,仅作为个人复习之用,并非原创。
边缘检测原理
你可以看到在&#160;边缘&#160;,相素值显著的&#160;改变&#160;了。表...
/*****************************************************
测试程序 【Sobel边缘 一阶导数】
他的最新文章
讲师:姜飞俊
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)

我要回帖

更多关于 图像梯度算子 的文章

 

随机推荐