在python中使用DWT计算图像帧的能量值显示错误

2024-04-30 03:00:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找出相框的能量。 这就是我在Matlab中的计算方法。在

[~,LH,HL,HH] = dwt2(rgb2gray(maskedImage),'db1'); % applying dwt 
E = HL.^2 + LH.^2 + HH.^2;    % Calculating the energy of each pixel.
Eframe = sum(sum(E))/(m*n); % m,n row and columns of image.

当我在python中为同一个图像编程时,预期的0.7的能量值为170 我的程序哪里出问题了,请提出建议

^{pr2}$

Tags: ofhhhl能量summatlablh计算方法
1条回答
网友
1楼 · 发布于 2024-04-30 03:00:18

分析的问题是numpy数组和MATLAB矩阵的顺序不同(默认情况下)。二维numpy数组的第一维是行,而2D MATLAB矩阵的第一维是列。dwt2函数依赖于此顺序。因此,为了得到dwt2的相同输出,需要在使用numpy数组之前对其进行转置。在

此外,dwt2输出numpy数组,而不是列表,因此您可以像在MATLAB中那样直接对它们进行数学运算。在

此外,您可以使用size获得图像的总大小,从而省去了m和{}的相乘。在

因此,假设颜色通道的顺序正确(BGR vs.RGB),这应该给MATLAB提供等效的结果:

#!usr/bin/python
import cv2
from pywt import dwt2

im = cv2.cvtColor(maskedimage, cv2.COLOR_BGR2GRAY)
_, (cH, cV, cD) = dwt2(im.T, 'db1')
# a - LL, h - LH, v - HL, d - HH as in matlab
Energy = (cH**2 + cV**2 + cD**2).sum()/im.size

print Energy

相关问题 更多 >