fork = mh.imread(path)
bin = fork[:,:,0]
bin = mh.erode(bin)
bin = (bin < 80)
第二张图片,但我必须使用它:
bin = (bin < 127)
为第一个。
有一种方法可以自动获得没有背景的好图像,或者我必须选择一个中值,希望对我的大部分图像都有好处吗?
答案 0 :(得分:1)
有一个名为“Otsu Threshold”的阈值。 Here您有更多信息。
您可以使用otsu
在Mahotas中执行此操作,或使用threshold_otsu
中的scikit-image执行此操作:
fork = mh.imread(path)
bin = fork[:,:,0]
thresh = mh.otsu(bin)
binary =( bin< thresh)
答案 1 :(得分:0)
我知道你想要将白色背景与图像分开。 以下是执行此操作的步骤。我会用简单的英语写,因为我不熟悉python。
1:计算图像的关闭(扩张和侵蚀的应用)。使用尺寸为5x5的正方形结构元素进行膨胀和侵蚀。
C = mh.dilate(bin)
C = mh.erode(C);
这将为您提供背景
2:从原始图像中减去背景:
C = C-bin
这将为您提供白色涂漆的星形图像,背景为黑色
3:现在计算二值化的自动阈值。使用简单的Otsu技术来估计最佳阈值。在openCV中,这类似于:
double thresh = cv::threshold(im,im,0,255,CV_THRESH_BINARY | CV_THRESH_OTSU);
cv::threshold(im,im,thresh,255,CV_THRESH_BINARY_INV);
这将为您的图像提供完美的效果。 不要试图猜测阈值。对于您的图像,它不是80而不是127。使用Otsu