2016-11-30 4 views
0

Здравствуйте У меня есть вопрос относительно sciKit изображения преобразования модуля:SciKit-Image Трансформация

Я пытаюсь найти оптимальное преобразование параметров, которые будут сплющивающимися мои изображения. Допускается до кубического преобразования, т. Е. 20 параметров. Я хочу получить первоначальное предположение для моего полинома третьего порядка, которое должно быть выведено из уже полученного многочлена 2-го порядка. Однако у меня возникли неприятности понимания, какие параметры назначения, где:

import numpy as np 
import matplotlib.pyplot as plt 
from skimage.transform import warp 
from skimage.transform import AffineTransform 
from skimage.transform import PolynomialTransform 

def polynomialTransform(a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5):  
    array = np.zeros((2,6)) 
    array[0][0] = a0 
    array[0][1] = a1 
    array[0][2] = a2 
    array[0][3] = a3 
    array[0][4] = a4 
    array[0][5] = a5 
    array[1][0] = b0 
    array[1][1] = b1 
    array[1][2] = b2 
    array[1][3] = b3 
    array[1][4] = b4 
    array[1][5] = b5 
    return(PolynomialTransform(array)) 

def polynomialTransform2(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9):  
    array = np.zeros((2,10)) 
    array[0][0] = a0 
    array[0][1] = a1 
    array[0][2] = a2 
    array[0][3] = a3 
    array[0][4] = a4 
    array[0][5] = a5 
    array[0][2] = a6 
    array[0][3] = a7 
    array[0][4] = a8 
    array[0][5] = a9 
    array[1][0] = b0 
    array[1][1] = b1 
    array[1][2] = b2 
    array[1][3] = b3 
    array[1][4] = b4 
    array[1][5] = b5 
    array[1][2] = b6 
    array[1][3] = b7 
    array[1][4] = b8 
    array[1][5] = b9 
    return(PolynomialTransform(array)) 

Теперь я пытаюсь понять, какие параметры из второго порядка соответствует коэффициентам, которые в полиномом третьего порядка. Я бежал несколько тестов:

def doTransfrom(cubeROI): #Enter any image in the format of an n*m numpy array 
     x0 = np.asarray([1,1,0,0,0,0,0,0,1,1,1,1]) 

     pCubic = np.asarray([1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1]) 

     quadratic=warp(cubeROI,polynomialTransform(x0[0],x0[1],x0[2],x0[3],x0[4],x0[5],x0[6],x0[7],x0[8],x0[9],x0[10],x0[11])) 

     cubic=warp(cubeROI,polynomialTransform2(pCubic[0],pCubic[1],pCubic[2],pCubic[3],pCubic[4],pCubic[5],pCubic[6],pCubic[7],pCubic[8],pCubic[9],pCubic[10],pCubic[11],pCubic[12],pCubic[13],pCubic[14],pCubic[15],pCubic[16],pCubic[17],pCubic[18],pCubic[19])) 


     plt.imshow(quadratic) 
     plt.show() 
     plt.imshow(cubic) 
     plt.show() 

Как вы можете видеть первые 2 и последние 4 параметры соответствуют друг другу ... Но я изо всех сил, чтобы выяснить 5 параметров, которые остались от квадратичного преобразования. На самом деле у меня такое ощущение, что ни один из параметров, которые появляются после «a1», ничего не делает - Таким образом, я считаю, что моя проблема возникает из-за того, что я кормлю свои an/bn s в PolynomialTrasnsform! Что я делаю не так?!

Что я действительно пытаюсь сделать: Для лучшего понимания - Я пытаюсь найти такую ​​систему координат, для которой разность набора изображений от его медианы минимальна:

min_(an,bn): chi^2 = (Delta - I(f(x,y,a_n,b_n))^2

Quadratic transform Cubic transform

+0

Каких преобразований координат Вас интересуют? И как будет выглядеть искаженное изображение? Можете ли вы прояснить описание «отличия набора изображений от его медианы»? Возможно, вы пытаетесь зарегистрировать изображения? –

+0

Привет, Стефан, у меня есть набор из 200 астрономических изображений, которые вычитаются из медианного изображения: pixel (i, j) _median = median (все пиксели (i, j)), которые показывают небольшое искажение. Я хочу сгладить их с помощью преобразования координат: таким образом, я ищу оптимальные (в смысле chi ** 2) коэффициенты преобразования координат a_n, b_n. Что я делаю, я разрешаю минимизировать минимальный уровень (медиа-обертка (Image_N, polytransform)). Поскольку для этого требуется численная тонкая настройка, я начинаю с полигона 1-го порядка, передаю установленную a_n, b_n в функцию соответствия 2-го порядка, чем передаю эти значения в 3-й порядок. Но я решил свою проблему! – Sebastiano1991

ответ

0

Здравствуйте я решил мою проблему:

Если один, где проходит преобразование параметров a_N, b_n как я определил их правильной сортировке:

второго порядка поли:

[a0,a1,a2,a3,a4,a5,b0,b1,b2,b3,b4,b5] 

третьего порядка поли:

[a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9] 

Значения, один хочет наследовать от полинома 2-го порядка до третьего, обозначается вторым индексом, который является порядком полинома 2-го порядка, например A00 (третий порядок) = a0 (второй порядок):

начального предположение для 3-го полинома порядка:

[a00,a11,a2,a3,a4,a5,a62,a73,a84,a95,b00,b11,b2,b3,b4,b5,b62,b73,b84,b95] 
+0

Кстати, вам почти не нужно перечислять такие параметры. Вы можете преобразовать 2D-массив в 1D-массив: 'np.ravel (x) ', и вы можете передать несколько параметров в функцию Python с помощью:' my_func (* params) '. –

+0

Ну, если я не питаю массив формы (2, n), то polyTransform жалуется: 'pCubic = np.asarray ([0,1,1,1,1,1,0,0,0,0,0, 0,1,1,1,1,1,0,0,0]) p = PolynomialTransform (pCubic) >>> raise ValueError ("недопустимая форма параметров преобразования") ValueError: недопустимая форма параметров преобразования ' Эта логика швов как из документов смены: skimage.transform.PolynomialTransform (params = None) params: (2, N) array – Sebastiano1991