java如何计算rowbyrow/columnbycolumn乘法?
我试图理解如何利用可分性特性实现快速傅里叶变换
书中的图片:冈萨雷斯,R.C.和R.E.伍兹。“数字图像处理,第四版全球版。”
根据这一点,正如我所理解的,我们必须像这样计算复正弦波值的矩阵:
Complex[] F = new Complex[i.width*i.height];
for (int x=0;x<i.img.length;x++){
F[x] = new Complex();
double theta = -2 * Math.PI * (x/(double)i.img.length);
F[x] = new Complex(Math.cos(theta), Math.sin(theta));
}
因此,我们的矩阵是一个1D数组,大小与我们的图像相同。 然后我们需要取一个图像,用逐行数组F相乘,然后取处理后的图像,用逐列数组F相乘
我不明白的是如何正确地执行逐行和逐列乘法
假设我们取F,并将其列按块分开。我是这样做的:
int chunk = image.width;
for(int f=0;f<F.length;f+=chunk){
row = Arrays.copyOfRange(F, f, Math.min(F.length,f+chunk));
for(int k=0; k < row.length; k++){
row[k] = row[k].mul(image[k]);
clone[k] = (byte) row[k].r;
}
}
但这是错误的,行变空了
我们真的应该像这样切割1D F数组,以便将其与像素值相乘吗?或者有另一种方法来计算逐行和逐列乘法?如何在Java中实现它
共 (0) 个答案