Numpy 映射3元素中的第一个元素';s细胞基质

Numpy 映射3元素中的第一个元素';s细胞基质,numpy,image-processing,Numpy,Image Processing,TL;博士: 给定一个形状(M,N,3)的np.数组,更改每个[M,N]值中的第一个元素的最有效方法是什么 你好, 作为我正在学习的图像处理课程的一部分,我需要手动量化图像。 如果我的输入是RGB格式,我首先需要将其转换为YIQ格式,然后对Y值执行量化。在这个过程中,我构建了一个表,将Y的每个值映射到一个新值Y'。接下来,我需要用Y'值而不是Y,以及I和Q的相同值构建一个相同形状的图像。最后,我将新图像,Y'IQ转换回RGB格式 我在映射过程中遇到了问题。我已经有了将Y与Y'关联的表,但是我在转

TL;博士:
给定一个形状(M,N,3)的np.数组,更改每个[M,N]值中的第一个元素的最有效方法是什么

你好,

作为我正在学习的图像处理课程的一部分,我需要手动量化图像。 如果我的输入是
RGB
格式,我首先需要将其转换为
YIQ
格式,然后对
Y
值执行量化。在这个过程中,我构建了一个表,将
Y
的每个值映射到一个新值
Y'
。接下来,我需要用
Y'
值而不是
Y
,以及
I
Q
的相同值构建一个相同形状的图像。最后,我将新图像,
Y'IQ
转换回
RGB
格式

我在映射过程中遇到了问题。我已经有了将
Y
Y'
关联的表,但是我在转换过程中没有成功

我的图像采用浮点格式,形状为
(12,13,3)
(例如)。我只需要变换每个单元格上的第一个元素(由3个元素组成)

我使用了以下循环

for n in range(0, imgYIQ.shape[0]):
    for j in range(0, imgYIQ.shape[1]):
        imgYIQ2[n, j][0] = (1 / 255) * Ttable['h(v)'][Ttable['v'] == imgYIQ2[n, j, 0]]

其中
t表
是将
Y
的任何值映射到
Y'
的表。我使用循环是因为我想对图像旧值进行条件设置(
[Ttable['v']==imgYIQ2[n,j,0]]


有没有办法使这个过程矢量化?

我采用了马克·塞切尔的方法。我首先将(h,w,d)数组转换为(hw,d)数组。在我的例子中,结果是(hw,3)。 然后,将(h8w,3)数组转换为(hw,3)pd.数据帧。
已经有了映射表,我只需使用
pd.merge(,sort=False)
,验证原始数组(hw,3)的顺序是否保持不变(我使用
YIQ
.loc[:,1]=
Y'IQ
.loc[:,1]和
YIQ
.loc[:,2]=
Y'IQ
.loc[:,2]这一事实来验证它。

在(hw,3)df中使用
Y'IQ
后,我将其转换为一个np.array(使用
pd.DataFrame.to_numpy
),然后我将生成的数组重塑为旧的形状(h,w,3)。

我采用了Mark Serchell方法。我首先将(h,w,d)数组转换为(hw,d)数组。在我的例子中,结果是(hw,3)。 然后,将(h8w,3)数组转换为(hw,3)pd.数据帧。
已经有了映射表,我只需使用
pd.merge(,sort=False)
,验证原始数组(hw,3)的顺序是否保持不变(我使用
YIQ
.loc[:,1]=
Y'IQ
.loc[:,1]和
YIQ
.loc[:,2]=
Y'IQ
.loc[:,2]这一事实来验证它。

在(hw,3)df中使用
Y'IQ
后,我将其转换为np.array(使用
pd.DataFrame.to_numpy
),然后我将生成的数组重塑为旧形状(h,w,3)。

如果您的I和Q通道保持不变,并且只转换Y,您是否考虑过拆分通道或仅在Y通道上创建一个视图?非常感谢它的工作,并为我节省了大量计算时间!如果您的I和Q通道保持不变,并且您仅转换Y,您是否考虑过拆分通道或仅在Y通道上创建视图?非常感谢,它非常有效,并为我节省了大量计算时间!