我的目标是处理图像上的照明和表情变化。所以我尝试实现一个 MATLAB 代码,以便只处理图像中的重要信息。换句话说,只使用图像上的“有用”信息。为此,有必要从图像中删除所有不重要的信息。
参考:本文
让我们看看我的步骤:
1)应用直方图均衡以获得histo_equalized_image=histeq(MyGrayImage)
. 以便在一定程度上可以处理较大的强度变化。
2)对histo_equalized_image
. 但在此之前,我应用了 svd 分解 ( [L D R]=svd(histo_equalized_image)
),然后这些奇异值用于生成在 1 和 2 之间变化J=L*power(D, i)*R
的派生图像。i
3)最后,将导出的图像与原始图像组合到:C=(MyGrayImage+(a*J))/1+a
. 其中 a 从 0 到 1 变化。
4)但上述所有步骤在不同的条件下都不能很好地执行。所以最后,应该使用小波变换来处理这些变化(我们只使用 LL 图像块)。低频分量包含有用的信息,不重要的信息也会在这个分量中丢失。(LL) 分量对光照变化和表情变化无效。
我为此写了一个matlab代码,我想知道我的代码是否正确(如果没有,那么如何纠正它)。此外,我很想知道我是否可以优化这些步骤。我们可以改进这种方法吗?如果是,那怎么办?请我需要帮助。
现在让我们看看我的 Matlab 代码:
%Read the RGB image
image=imread('img.jpg');
%convert it to grayscale
image_gray=rgb2gray(image);
%convert it to double
image_double=im2double(image_gray);
%Apply histogram equalization
histo_equalized_image=histeq(image_double);
%Apply the svd decomposition
[U S V] = svd(histo_equalized_image);
%calculate the derived image
P=U * power(S, 5/4) * V';
%Linearly combine both images
J=(single(histo_equalized_image) + (0.25 * P)) / (1 + 0.25);
%Apply DWT
[c,s]=wavedec2(J,2,'haar');
a1=appcoef2(c,s,'haar',1); % I need only the LL bloc.