Numpy 映射3元素中的第一个元素';s细胞基质
TL;博士: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'关联的表,但是我在转
给定一个形状(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通道上创建视图?非常感谢,它非常有效,并为我节省了大量计算时间!