我有一组25张标签为"感染"的图像和25张标签为"正常"的图像。我试图提取双树复小波变换为基础的系数为特征的每个图像。
我使用DT-CWT获得系数的代码如下:I = imread('infected_img1.jpg'); %read image
I = rgb2gray(I); %rgb ro gray-scale
L = 6; %no. of levels for wavelet decomposition
I = reshape(I',1,size(I,1)*size(I,2)); %change into a vector
I = [I,zeros(1,2^L - rem(length(I),2^L))]; %pad zeros to make dim(I) a multiple of 2^L
I = double(I);
dt = dddtree('cplxdt',I,L,'dtf3'); %perform DT-CWT
dt_Coeffs = (dt.cfs{L}(:,:,1) + 1i*dt.cfs{L}(:,:,2)); %extract coefficents at Level 6
现在,因为我还有24张图片要从中提取系数,所以我对每张图片都做这个块。我的最终目标是将每次迭代产生的所有系数向量相加,形成一个矩阵。但是每个图像倾向于给出不同大小的系数向量。
我想知道一种降维的方法,可以将每个向量降维到一个统一的大小,同时又能保留它的信息。谁能提出一些清晰明了的方法?正如我在评论中提到的,
不能收缩某些东西(即删除信息)而仍然保留信息的所有。
相反,您可以将所有向量填充到最大向量的长度,然后将它们连接起来创建一个矩阵。您可以编写自己的方法,但本着不重复发明轮子的精神,我以前使用的是padcat()
。这是非常容易使用和垫与NaN
,但你可以很容易地将其改为0
。
下面是一个示例用法,其中还包含从NaN
到0
的方便转换。
>> a = [1 2 3 4];
>> b = [1 2 3];
>> c = padcat(a, b);
c =
1 2 3 4
1 2 3 NaN
>> c(isnan(c)) = 0
c =
1 2 3 4
1 2 3 0