2011-04-13 23 views
2

我使用OpenCV库中的cvThresholding()例程来使用Otsu的阈值方法执行二进制化。有时这种方法失败了,这是可以理解的,因为Otsu计算整个图像的单个阈值。为了改善结果,我决定将图像分解成网格,然后在网格的每个部分执行Otsu二值化。结果现在看起来令人鼓舞,但基于网格的分割使得输出二进制图像本质上不连续,特别是在网格的边缘处。有没有办法解决这个问题?实现本地化的Otsu二元化

请注意,这种方法最适合我。我意识到opencv中的自适应阈值选项,对于我来说它似乎不起作用,因为它与Otsu的二进制方法相比太敏感了。

等待回复。提前致谢。

+0

Hi @Saurabh Gandhi正在尝试以下语句“cvThreshold(Img1,Img1,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU);” Img1是32F的1通道图像,但它不断地引发歧视。你可以帮帮我吗 。 pLzzzz – krishna 2013-05-03 03:52:28

回答

3

最简单的可能是内插网格中心之间的阈值。虽然阈值图像是不连续的(渐变,而不是幅度),但最终结果不太可能出现。

3

如果您尝试移动窗口而不是打磨?例如,对于每个像素,基于以该像素为中心的5x5或7x7面片获得的阈值进行二值化(在边缘处进行适当的包裹)。

移动的窗口将使阈值在图像上逐渐连续变化。

+0

对于图像中的每个像素,声音在计算上花费相当大。这就是说,我现在无法想象任何更好的事情。 – misha 2011-04-15 13:25:02