Дистанционное преобразование OpenCV, дающее странные результаты вблизи границы - PullRequest
2 голосов
/ 23 декабря 2011

Я заметил, что distanceTransform из opencv дает странные результаты, например, следующий код:

arr = numpy.zeros((6, 6), numpy.uint8)
(distance, labels) = cv2.distanceTransform(arr, cv2.cv.CV_DIST_L1, cv2.cv.CV_DIST_MASK_PRECISE)
print 'array\n', arr
print '\ndistance\n', distance

печатает:

array
[[0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]]

distance
[[ 2.  1.  1.  1.  1.  2.]
 [ 1.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  1.]
 [ 1.  0.  0.  0.  0.  1.]
 [ 2.  1.  1.  1.  1.  2.]]

Почему существуют положительные значениявозле границ?У меня даже странные результаты, когда я выполняю это:

arr = numpy.zeros((6, 6), numpy.uint8)
arr[1:-1,1:-1] = 255

(distance, labels) = cv2.distanceTransform(arr, cv2.cv.CV_DIST_L1, cv2.cv.CV_DIST_MASK_PRECISE)
distance = distance.astype(numpy.uint8)
print 'array\n', arr
print '\ndistance\n', distance

дает:

array
[[  0   0   0   0   0   0]
 [  0 255 255 255 255   0]
 [  0 255 255 255 255   0]
 [  0 255 255 255 255   0]
 [  0 255 255 255 255   0]
 [  0   0   0   0   0   0]]

distance
[[ 8192.  8192.  8192.  8192.  8192.  8192.]
 [ 8192.  8192.  8192.  8192.  8192.  8192.]
 [ 8192.  8192.  8192.  8192.  8192.  8192.]
 [ 8192.  8192.  8192.  8192.  8192.  8192.]
 [ 8192.  8192.  8192.  8192.  8192.  8192.]
 [ 8192.  8192.  8192.  8192.  8192.  8192.]]
...