-1

我有很多这样或这样图像,我使用以下代码:

fork = mh.imread(path)
bin = fork[:,:,0]
bin = mh.erode(bin)
bin = (bin < 80)

对于第二张图片,但我必须使用这个:

bin = (bin < 127)

为了第一。

有一种方法可以自动获得没有背景的好图像,或者我必须选择一个中值,希望对我的大多数图像都有好处?

4

2 回答 2

1

我了解您想将白色背景与图像分开。以下是执行此操作的步骤。我会用简单的英文写,因为我不熟悉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。使用大津

于 2014-01-16T08:50:29.420 回答
1

有一个阈值称为“Otsu Threshold”。在这里,您可以获得更多信息。

您可以otsu在 Mahotas 或scikit-imagethreshold_otsu中使用:

fork = mh.imread(path)
bin = fork[:,:,0]
thresh = mh.otsu(bin)
binary =( bin< thresh)
于 2014-01-16T09:33:54.953 回答