Hi what I have to do is todo a decorellation on RGC components of an image to obtain an efficient decodification of input datas with PCA analysis, adapted to local statistics of image (rbgDecorr in matlab code. I finally obtain 3 components. This is done with colorDecorolletion() You can see Matlab's code to understand better:

main (I put here my question):

 [r c compc] = size(image);

numColComp = compc; % 3 in case of color images, 1 in grayscale images
inComp = reshape(im, r*c, numColComp);

Decorr=colorDecorrelation(inComp,numColComp);
rgbDecorr= reshape(Decorr, r, c, numColComp); //does it create a 3dimensional array?
clear Decorr;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Color Decorrelation
% Input Parameters:
%  im           - image matrix
%  numColComp   - number of image channels
%
% Output value:
%  Xdecorr  - decorrelated image, same dimensions as the original one
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function Xdecorr=colorDecorrelation(X,numColComp)

if numColComp>1
mu = mean(X);
X = bsxfun(@minus, X, mu);
A = X'*X;
[V,D,notused] = svd(A);

Xdecorr=X*V;

else % in case of a grayscale image
Xdecorr = X;
end


My C++ code:

#include <stdio.h>
#include <cxcore.h>
#include <cv.h>
#include <highgui.h>
#include <math.h>
#include <vector>

using namespace cv;
using namespace std;

#define PI 3.14159265

Mat colorDecorrelation(Mat img,int numColComp);

int main(){

if(img.empty()){
cout<<"The image is empty \n";
return -1;
}

namedWindow("Image Display", CV_WINDOW_AUTOSIZE);
imshow("Image Display", img);
waitKey(0);
destroyWindow("Image Display");

sz2filt_r = new int;
sz2filt_c = new int;

rows=img.rows;
cols= img.cols;
nChannels= img.channels();
numColComp = nChannels ;

inCompImg = img.reshape(numColComp,rows*cols);

imgDecorr = colorDecorrelation(inCompImg,numColComp);

rows=imgDecorr.rows;
cols=imgDecorr.cols;
nChannels= imgDecorr.channels();