如何在JavaCV / OpenCV中进行PCA图像压缩

问题描述 投票:1回答:1

我试图在javacv / opencv中进行图像压缩。

首先是代码:

CanvasFrame canvasOrig = new CanvasFrame("Original");
canvasOrig.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

CanvasFrame canvasOrig = new CanvasFrame("Original");
canvasOrig.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

CanvasFrame canvasGray = new CanvasFrame("Gray");
canvasGray.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

CanvasFrame canvasPCA = new CanvasFrame("PCA");
canvasPCA.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);

OpenCVFrameConverter.ToIplImage t = new OpenCVFrameConverter.ToIplImage();
IplImage image = cvLoadImage("640x480.jpg");

Mat imageOriginal = t.convertToMat(t.convert(image));   
Mat imageGray = new Mat();
cvtColor(imageOriginal, imageGray, CV_RGB2GRAY);
System.out.println("ArraySize-Original-Mat: "+imageGray.arraySize());

PCA pca = new PCA(imageGray,new Mat(), CV_PCA_DATA_AS_ROW, 48);
Mat eigValues = pca.eigenvalues().clone();
Mat eigVectors = pca.eigenvectors().clone();

Mat projectedMat = new Mat();
pca.project(imageGray, projectedMat);

在PCA计算过程中,方法就像我期望的那样。

我的问题是:

我怎么能从PCA的结果中压缩原始图像?

投影后,我得到一个Mat(projectedMat),其中包含给定组件的数量和图像的高度。在backProjection之后,ArraySize远远高于原始Image。这不是我所期望的。

谢谢

java image opencv pca javacv
1个回答
0
投票

我找到了自己的答案。

问题或在此上下文中的解决方案是将图像转换为32F或64F类型以进行浮点运算。

在计算pca之后,必须将图像或偶数矩阵转换回类型8位数。

© www.soinside.com 2019 - 2024. All rights reserved.