有关于python数字图像处理出现矩阵相减没有负数(值都在0-255)的情况分析

有关于python数字图像处理出现矩阵相减没有负数(值都在0-255)的情况分析

问题的发现:

这些天在做我们本校课程机器学习大作业的过程中遇到了一些瓶颈:在我使用有关数字图像矩阵运算的过程中两个参数矩阵相减(譬如 R通道的值-G通道的值)的时候,测试结果的输出一直是正数,且其值都在(0-255)中,这给我带来了不少麻烦。
测试代码如下

print(imgs_train[1][:,:,1])
print("====================================")
print(imgs_train[1][:,:,2])
print("====================================")
print(imgs_train[1][:,:,1]-imgs_train[1][:,:,2])

输出结果为

[[141 143 144 ...  90  90  68]
 [139 141 141 ...  88  90  68]
 [140 141 140 ...  87  90  68]
 ...
 [ 52  52  52 ...  85  83  81]
 [ 52  52  52 ...  85  83  81]
 [ 52  52  52 ...  85  83  81]]
====================================
[[171 173 172 ... 106 107  84]
 [169 171 169 ... 106 107  86]
 [169 170 169 ... 107 109  88]
 ...
 [ 40  40  43 ...  68  66  64]
 [ 40  40  43 ...  68  66  64]
 [ 40  40  43 ...  68  66  64]]
====================================
[[226 226 228 ... 240 239 240]
 [226 226 228 ... 238 239 238]
 [227 227 227 ... 236 237 236]
 ...
 [ 12  12   9 ...  17  17  17]
 [ 12  12   9 ...  17  17  17]
 [ 12  12   9 ...  17  17  17]]

可以看得出来,虽然两个矩阵相减,但是理应为负值的元素却像是取模了一般又变为了正数(255+计算结果),导致这样情况的原因其实是因为矩阵的元素类型有关。默认来说这样的矩阵类型是uint8即无符号8bit整型,这样进行相减当然得不出正确结果。

问题的解决

在查阅相关资料之后,发现可以通过设置其元素格式进行运算,从而规避了无负数结果的发生。
测试代码如下:

print(imgs_train[1][:,:,1])
print("====================================")
print(imgs_train[1][:,:,2])
print("====================================")
print(imgs_train[1][:,:,1].astype(np.float32)-imgs_train[1][:,:,2].astype(np.float32))

结果显示为:

[[141 143 144 ...  90  90  68]
 [139 141 141 ...  88  90  68]
 [140 141 140 ...  87  90  68]
 ...
 [ 52  52  52 ...  85  83  81]
 [ 52  52  52 ...  85  83  81]
 [ 52  52  52 ...  85  83  81]]
====================================
[[171 173 172 ... 106 107  84]
 [169 171 169 ... 106 107  86]
 [169 170 169 ... 107 109  88]
 ...
 [ 40  40  43 ...  68  66  64]
 [ 40  40  43 ...  68  66  64]
 [ 40  40  43 ...  68  66  64]]
====================================
[[-30. -30. -28. ... -16. -17. -16.]
 [-30. -30. -28. ... -18. -17. -18.]
 [-29. -29. -29. ... -20. -19. -20.]
 ...
 [ 12.  12.   9. ...  17.  17.  17.]
 [ 12.  12.   9. ...  17.  17.  17.]
 [ 12.  12.   9. ...  17.  17.  17.]]

综上所述,在遇到矩阵不明数值类型的时候可以指定其类型,之后矩阵元素就会以这样的数值类型进行计算。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值