【TensorFlow-windows】投影变换

前言

没什么重要的,就是想测试一下tensorflow的投影变换函数tf.contrib.image.transform中每个参数的含义

国际惯例,参考文档

官方文档

描述

调用方法与默认参数:

tf.contrib.image.transform(
    images,
    transforms,
    interpolation='NEAREST',
    output_shape=None,
    name=None
)

输入解释:

  • images: 输入图像的占位符,通常三种输入(图像数量,高,宽,通道),(高,宽,通道),(高,宽)

  • transforms:投影变换矩阵,维数为8的向量,可以是(1,8)或(N,8),假设是 ( a 1 , a 2 , a 3 , b 1 , b 2 , b 3 , c 1 , c 2 ) (a_1,a_2,a_3,b_1,b_2,b_3,c_1,c_2) (a1,a2,a3,b1,b2,b3,c1,c2),执行的操作就是将(x,y)投影到(x’,y’)
    [ a 1 a 2 a 3 b 1 b 2 b 3 ] × [ x y 1 ] × 1 k = [ x ′ y ′ ] w . t . l = c 1 x + c 2 y + 1 \begin{bmatrix} a_1&a_2&a_3\\ b_1&b_2&b_3 \end{bmatrix}\times \begin{bmatrix} x\\y\\1 \end{bmatrix}\times \frac{1}{k}=\begin{bmatrix} x'\\y' \end{bmatrix}\\ w.t.\quad l=c_1x+c_2y+1 [a1b1a2b2a3b3]×xy1×k1=[xy]w.t.l=c1x+c2y+1
    通俗点就是:
    [ x ′ , y ′ ] = [ ( a 1 x + a 2 y + a 3 ) / k , ( b 1 x + b 2 y + b 3 ) / k ] [x', y'] = [(a_1 x + a_2 y + a_3) / k, (b_1 x + b_2 y + b_3) / k] [x,y]=[(a1x+a2y+a3)/k,(b1x+b2y+b3)/k]
    通过矩阵的形式更能看出来是坐标变换。

  • interpolation:插值方法,近邻插值NEAREST,双线性插值BILINEAR

  • output_shape:输出大小,默认是输入大小

代码

基本代码:

import numpy as np
import tensorflow as tf
import cv2

#创建装图像的容器
input=tf.placeholder(dtype=np.uint8,shape=[640,1024,3]) #高,宽,通道
#创建操作
trans_op=tf.contrib.image.transform(input,[1,0,0,0,1,0,0,0])

#读取图像
img=cv2.imread('test_img.jpg')

#执行操作
with tf.Session() as sess:
    trans_img=sess.run(trans_op,feed_dict={input:img})
    cv2.imshow('img',trans_img)
cv2.waitKey()
cv2.destroyAllWindows()

可以得到原图为:

修改 a 1 a_1 a1

trans_op=tf.contrib.image.transform(input,[2,0,0,0,1,0,0,0])

【TensorFlow-windows】投影变换_第1张图片

修改 a 2 a_2 a2

trans_op=tf.contrib.image.transform(input,[1,0.5,0,0,1,0,0,0])

【TensorFlow-windows】投影变换_第2张图片

修改 a 3 a_3 a3

trans_op=tf.contrib.image.transform(input,[1,0,100,0,1,0,0,0])

修改 b 1 b_1 b1

trans_op=tf.contrib.image.transform(input,[1,0,0,0.5,1,0,0,0])

【TensorFlow-windows】投影变换_第3张图片

修改 b 2 b_2 b2

trans_op=tf.contrib.image.transform(input,[1,0,0,0,2,0,0,0])

【TensorFlow-windows】投影变换_第4张图片

修改 b 3 b_3 b3

trans_op=tf.contrib.image.transform(input,[1,0,0,0,1,100,0,0])

【TensorFlow-windows】投影变换_第5张图片

调整 c 1 c_1 c1

trans_op=tf.contrib.image.transform(input,[1,0,0,0,1,0,0.0005,0])

【TensorFlow-windows】投影变换_第6张图片

调整 c 2 c_2 c2

trans_op=tf.contrib.image.transform(input,[1,0,0,0,1,0,0,0.0005])

【TensorFlow-windows】投影变换_第7张图片

总结

前六个参数按顺序,讲道理应该是:左缩放,左拉扯,左移,上拉扯,上缩放,上移

后两个参数不清楚名称是什么,感觉扭曲了一下,而且值要很小

代码就不分享了,上面已经贴出完整的了。

你可能感兴趣的:(tensorflow)