#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]).