[英]How to do PCA Image Compression in JavaCV / OpenCV
我打算在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高得多。 那不是我所期望的。
谢谢
我为自己找到了答案。
问题或在此情况下的解决方案是将图像转换为类型32F或64F的浮点运算。
在计算g pca之后,图像或什至矩阵必须转换回类型8位数字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.