Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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 实现局部大津二值化_C_Matlab_Image Processing_Opencv_Computer Vision - Fatal编程技术网

C 实现局部大津二值化

C 实现局部大津二值化,c,matlab,image-processing,opencv,computer-vision,C,Matlab,Image Processing,Opencv,Computer Vision,我正在使用OpenCV库中的cvThresholding()例程,使用Otsu的阈值方法执行二值化。有时这种方法会失败,这是可以理解的,因为大津为整个图像计算一个阈值。为了改进结果,我决定将图像分解为网格,然后对网格的每个部分执行大津二值化。结果现在似乎令人鼓舞,但是基于网格的分区使输出的二值图像在本质上不连续,特别是在网格的边缘。有办法解决这个问题吗 请注意,这种方法最适合我。我知道opencv中提供的自适应阈值选项,但这似乎对我不起作用,因为它与大津的二值化方法相比过于敏感 等待答复。提前感

我正在使用OpenCV库中的cvThresholding()例程,使用Otsu的阈值方法执行二值化。有时这种方法会失败,这是可以理解的,因为大津为整个图像计算一个阈值。为了改进结果,我决定将图像分解为网格,然后对网格的每个部分执行大津二值化。结果现在似乎令人鼓舞,但是基于网格的分区使输出的二值图像在本质上不连续,特别是在网格的边缘。有办法解决这个问题吗

请注意,这种方法最适合我。我知道opencv中提供的自适应阈值选项,但这似乎对我不起作用,因为它与大津的二值化方法相比过于敏感


等待答复。提前感谢。

最简单的方法可能是在网格中心之间插入阈值。虽然阈值图像是不连续的(在梯度上,而不是在大小上),但它不太可能在最终结果中出现。

如果您尝试移动窗口而不是网格化,会怎么样?例如,对于每个像素,根据以该像素为中心的5x5或7x7面片获得的阈值进行二值化(边缘有适当的环绕)


一个移动的窗口将使阈值在整个图像中逐渐而连续地变化

对于图像中的每个像素来说,这样做的计算成本相当高。这就是说,目前我自己想不出比这更好的了。Hi@Saurabh Gandhi正在尝试下面的语句“cvThreshold(Img1,Img1,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU);”Img1是32F单通道图像,但它不断地抛出例外。你能帮我吗。PLZZZ