pca_ii.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:PCA-II 作者: yoonlab 项目源码 文件源码
def pca_ii(ori_image):
    # Resize particular size
    ori_image = tf.stack(ori_image) # if dim 3 -> 4
    ori_image = tf.expand_dims(ori_image, [0])
    ori_image = tf.cast(ori_image, tf.float32)
    ori_image += 1.0 # Prevent zero divide

    # Extract uniform k sample
    ksizes = [1, 1, 1, 1] # 1x1 pixel
    strides = [1, 10, 10, 1] # 4
    rates = [1, 1, 1, 1]

    sample_pixel = tf.extract_image_patches(ori_image, ksizes, strides, rates, padding='VALID')
    sample_pixel = tf.squeeze(sample_pixel, [0])

    num_sample = sample_pixel.get_shape()[0].value * sample_pixel.get_shape()[1].value
    sample_pixel = tf.reshape(sample_pixel, [num_sample, 1, 1, 3])

    pixel_R = sample_pixel[:,0,0,0]
    pixel_G = sample_pixel[:,0,0,1]
    pixel_B = sample_pixel[:,0,0,2]

    geoM = tf.pow(pixel_R * pixel_G * pixel_B, 1.0/3.0)

    ch_r = tf.reshape(tf.log(pixel_R / geoM), [1, num_sample])
    ch_b = tf.reshape(tf.log(pixel_B / geoM), [1, num_sample])

    X = tf.concat([ch_r, ch_b], 0)
    [U, S, V] = tf.svd(X)

    vec = S[:,0]
    alpha = tf.abs(tf.atan(-vec[0] / vec[1]))

    tmp = tf.squeeze(ori_image, [0])
    pixel_R = tmp[:,:,0]
    pixel_G = tmp[:,:,1]
    pixel_B = tmp[:,:,2]

    geoM = tf.pow(pixel_R * pixel_G * pixel_B, 1.0/3.0)

    num_pixel = ori_image.get_shape()[1].value * ori_image.get_shape()[2].value
    ch_r = tf.log(pixel_R / geoM)
    ch_b = tf.log(pixel_B / geoM)

    ii_image = ch_r * tf.cos(alpha) + ch_b * tf.sin(alpha)
    return ii_image, alpha
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号