Ошибка значения: слишком много значений для распаковки (ожидается 2) при применении cross_correlation_shifts

#python #computer-vision #scikit-image #image-registration

#python #компьютерное зрение #scikit-изображение #регистрация изображения

Вопрос:

Я очень новичок в компьютерном зрении и хотел узнать о регистрации изображений. Я хотел применить cross_correlation_shifts, но я продолжаю получать сообщение об ошибке. Код, который я написал в jupyter notebook, выглядит следующим образом:

 from skimage import io
import image_registration
from image_registration import cross_correlation_shifts
image = io.imread("Images/Mug.jpg")
offset_image = io.imread("Images/rotated_Mug.jpg")
xoff, yoff = image_registration.cross_correlation_shifts(image, offset_image)
print("Offset image ")
print("Pixels shifted by: ", xoff, yoff)
 

запустив код, связанный с cross_correlation_shifts, я получаю эту ошибку:

 ---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-46-0d64c5cb8855> in <module>
----> 1 xoff, yoff = image_registration.cross_correlation_shifts(image, offset_image)
      2 
      3 print("Offset image ")
      4 print("Pixels shifted by: ", xoff, yoff)

/opt/anaconda3/lib/python3.7/site-packages/image_registration/cross_correlation_shifts.py in cross_correlation_shifts(image1, image2, errim1, errim2, maxoff, verbose, gaussfit, return_error, zeromean, **kwargs)
     87         raise ValueError("Cross-correlation image must have same shape as input images.  This can only be violated if you pass a strange kwarg to correlate2d.")
     88 
---> 89     ylen,xlen = image1.shape
     90     xcen = xlen/2-(1-xlen%2)
     91     ycen = ylen/2-(1-ylen%2)

ValueError: too many values to unpack (expected 2)
 

Изображения, которые я использую, относятся к одной и той же кружке. первый Mug.jpg это обычное прямое изображение, повернутое — это изображение той же Кружки, но оно было наклонено вправо.

Не мог бы кто-нибудь, пожалуйста, сказать мне, в чем здесь проблема?

Комментарии:

1. Можете ли вы переформатировать вывод ошибки, он не очень удобочитаем. Но я думаю, проблема в том, что изображения должны быть одинаковой формы «Кросс-корреляционное изображение должно иметь ту же форму, что и входные изображения. Это может быть нарушено только в том случае, если вы передадите странный kwarg в correlate2d «.

2. Я обновил форматирование, надеюсь, оно стало более понятным. Свойства формы и размера обоих изображений одинаковы, я просто проверил, чтобы убедиться.

3. ваши изображения выглядят как 2D RGB , поэтому image1.shape (скажем) (512, 512, 3), т.Е. ylen, xlen, num_channels . Вам нужно как-то преобразовать их в изображения в оттенках серого.

4. @Juan Это был хороший совет, спасибо. Пожалуйста, сделайте это ответом, чтобы я мог его отметить. При этом я больше не получаю ошибок выполнения, хотя я все еще не получаю ответа, который ищу при регистрации изображений, поскольку изображения, похоже, не вращаются в правильном направлении. Поэтому я продолжу расследование и, возможно, задам еще один вопрос.

Ответ №1:

Ваши изображения выглядят как 2D RGB, так что image1.shape равен (скажем) (512, 512, 3), т.Е. ylen, xlen, num_channels . Вам нужно каким-то образом преобразовать их в оттенки серого, например, с skimage.color.rgb2gray помощью (хотя будьте осторожны, так как это приведет к масштабированию вашего изображения до плавающих значений в [0, 1]).