用Pytorch实现RGB2LAB,LAB2RGB。

本文介绍了如何使用Pytorch实现RGB到Lab以及Lab到RGB的颜色空间转换。通过参考相关博客,作者提供了实现代码,并展示了使用Pytorch转换后的图像与Photoshop转换结果的对比。
摘要由CSDN通过智能技术生成

参考博客链接Python实现RGB和Lab颜色空间互转
Python实现RGB转Lab颜色空间,PS:和PhotoShop转换结果一下

:用pytorch实现第一和第二篇博客的代码,同时加入LAB2RGB的功能。
环境:Python3,pytorch1.0.0。OpenCV+numpy。

原图:
原图
第一篇博客代码的重建图:博客链接一重建图

pytorch实现的第一篇博客代码的重建图:我的重建图

pytorch实现的与PS相同结果的重建图:我的PS算法重建图
代码如下:

# -*- coding: utf-8 -*-
import numpy as np
import cv2
import torch

# 作者:李敏盛
# 时间:2020-11-27

# #############################################################
# 原代码来自链接:
# https://blog.csdn.net/qq_36810544/article/details/83855962
# RGB2XYZ空间的系数矩阵
M = np.array([[0.412453, 0.357580, 0.180423],
              [0.212671, 0.715160, 0.072169],
              [0.019334, 0.119193, 0.950227]])
Mt = np.linalg.inv(M) # M的逆矩阵,用于实现XYZ2RGB
# [[ 3.24048134 -1.53715152 -0.49853633]
#  [-0.96925495  1.87599     0.04155593]
#  [ 0.05564664 -0.20404134  1.05731107]]

# im_channel取值范围:[0,1]
def f(im_channel):
    return np.power(im_channel, 1 / 3) if im_channel > 0.008856 else 7.787 * im_channel + 0.137931
def anti_f(im_channel):
    return np.power(im_channel, 3) if im_channel > 0.206893 else (im_channel - 0.137931) / 7.787

# RGB 行向量转 xyz 行向量,但实际上输入的是BGR行向量(B,G,R),大小为0到255。
def __rgb2xyz__(pixel):
    b, g, r = pixel[0], pixel[1], pixel[2]
    rgb = np.array([r, g, b]) # 实现bgr转rgb
    XYZ = np.dot(M, rgb.T) # 3x3 * 3x1 = 3x1
    XYZ = XYZ / 255.0 # to [0,1]
    return (XYZ[0] / 0.95047, XYZ[1] / 1.0, XYZ[2] / 1.08883)

def __xyz2lab__(xyz): # xyz 行向量转 LAB 行向量
    F_XYZ = [f(x) for x in xyz]
    L = 116 * F_XYZ[1] - 16 if xyz[1] > 0.008856 else 903.3 * xyz[1] # [0,100]
    a = 500 * (F_XYZ[0] - F_XYZ[1]) # [-127,127]
    b = 200 * (F_XYZ[1] - F_XYZ[2]) # [-127,127]
    return (L, a, b)

def RGB2Lab(pixel): # 实现RGB行向量转LAB行向量,但实际上输入的是RGB行向量
                    # (B,G,R),大小为0到255
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值