【发布时间】:2014-02-13 16:05:15
【问题描述】:
我的目标是处理图像上的照明和表情变化。所以我尝试实现一个 MATLAB 代码,以便只处理图像中的重要信息。换句话说,只使用图像上的“有用”信息。为此,有必要从图像中删除所有不重要的信息。
参考:this paper
让我们看看我的步骤:
1) 应用直方图均衡以获得histo_equalized_image=histeq(MyGrayImage)。使得大的强度变化
一定程度上是可以处理的。
2) 对 histo_equalized_image 应用 svd 近似值。但在此之前,我应用了 svd 分解([L D R]=svd(histo_equalized_image)),然后这些奇异值用于生成派生图像J=L*power(D, i)*R,其中i 在 1 和 2 之间变化。
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.
【问题讨论】:
标签: matlab image-processing computer-vision svd image-enhancement