Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从canny图像中删除高频区域?_C++_Opencv_Image Processing_Computer Vision - Fatal编程技术网

C++ 如何从canny图像中删除高频区域?

C++ 如何从canny图像中删除高频区域?,c++,opencv,image-processing,computer-vision,C++,Opencv,Image Processing,Computer Vision,假设我有一张精明的图像,例如我从互联网上偷来的这张: 我需要检测并删除具有高频特征的区域。所以这个图像应该变成这样: (请原谅GIMP技能) 换句话说,包含高可变性特征的区域应该变成黑色 据我所知,我可以使用傅里叶变换之类的方法过滤掉这些类型的区域,但我不确定这是如何或是否最佳方法。“据我所知,我可以使用傅里叶变换之类的方法过滤掉这些类型的区域,但我不确定这是如何或是否最佳方法。”,事实上,这是一种方法。更好的方法是先进行低通滤波,然后检测边缘。它的优点在于,低通滤波器类似于高斯模糊——你甚

假设我有一张精明的图像,例如我从互联网上偷来的这张:

我需要检测并删除具有高频特征的区域。所以这个图像应该变成这样:

(请原谅GIMP技能)

换句话说,包含高可变性特征的区域应该变成黑色


据我所知,我可以使用傅里叶变换之类的方法过滤掉这些类型的区域,但我不确定这是如何或是否最佳方法。

“据我所知,我可以使用傅里叶变换之类的方法过滤掉这些类型的区域,但我不确定这是如何或是否最佳方法。”,事实上,这是一种方法。更好的方法是先进行低通滤波,然后检测边缘。它的优点在于,低通滤波器类似于高斯模糊——你甚至不需要手动进行傅里叶变换。在检测边缘之前简单地模糊图像将减少大量虚假的高频边缘。当然,为了获得更细粒度的图像,我们需要进入傅里叶空间。问题是,我需要直接处理边缘检测到的图像,在得到二值边缘maskOof之前,我不能修改原始图像。好的,这是一个更大的问题,就像我说的,从图像中去除高频(例如通过低通滤波器)类似于模糊。因此,如果你只是对你的边缘图像这样做,你将只是模糊边缘,而不是其他真正的东西。你需要一种不同于仅仅过滤的方法。对,但那是在空间域。边缘本身是高频特征,所以对这个问题进行频域分析并没有什么帮助。至少,据我所知不是这样。盒子过滤器怎么样?这将取某个窗口的平均值——如果有很多边缘,那么会有更多的白色,因此平均值会更高。对一个盒子过滤器设定阈值可能会给你一个需要移除的地方的面具。这对我来说相当有效。谢谢@alkasm