2016-02-20 2 views
2

Я пытаюсь масштабировать набор изображений в Skimage. Я использую следующий код, который хорошо работает, за исключением того, что новое масштабированное изображение (в два раза) теперь сосредоточено в верхнем левом углу (см. Ниже). Я хотел бы, чтобы изображение оставалось в исходном центре. Есть ли простой способ достичь этого? Моя цель - сохранить сохраненную копию изображения (например, как файл jpg), чтобы оставаться центрированным. Мой вопрос не касается отображения изображения через imshow. Например. когда я сохраняю изображение ниже - изображение центрируется в верхнем левом углу, что вызывает проблемы с последующими шагами в моем коде.Масштаб и изображение центра - Skimage

###Part of the code 
    tform=skimage.transform.SimilarityTransform(scale=2, rotation=0,translation=(0, 0)) 
    rotated = skimage.transform.warp(test, tform) 
    plt.imshow(rotated) 
    import scipy 
    scipy.misc.imsave('rotated.jpg', rotated) 

enter image description here

+0

Я разъяснен вопрос - что я думаю, отличаются от ранее вопроса, связанного с черчением – user1885116

ответ

0

Масштабирование, как само по себе определяется как одного подмножества аффинных преобразований. Аффинная матрица преобразования для масштабирования только определяется как

s_x, 0, 0 
0, s_y, 0 
0, 0, 1 

, где s_x и s_y являются коэффициенты масштабирования в соответствующих размеров (определенных относительно начала координат на (0,0)). Если вы хотите, чтобы ваше изображение было масштабировано не по отношению к началу координат, но еще одна точка, вы сначала переводите изображение, так что центр масштабирования находится в начале координат, затем вы масштабируете, затем вы перемещаете изображение назад. Вы просто выполняете матричное умножение матриц преобразования с матрицей масштабирования. У меня была аналогичная проблема с поворотом, которую можно найти here. Для этой проблемы применяется тот же принцип. В результате

s_x, 0, (-s_x*x)+x 
0, s_y, (-s_y*y)+y 
0, 0,   1 

где x и y наполовину размер вашего изображения в соответствующих размерах. Полученная матрица может быть использована с:

skimage.transform.AffineTransform(matrix) 
Смежные вопросы