Matlab 奇异值分解与小波变换相结合的图像增强

Matlab 奇异值分解与小波变换相结合的图像增强,matlab,image-processing,computer-vision,svd,image-enhancement,Matlab,Image Processing,Computer Vision,Svd,Image Enhancement,我的目标是处理图像上的照明和表情变化。因此,我试图实现一个MATLAB代码,以便只处理图像中的重要信息。换句话说,只处理图像上的“有用”信息。为此,必须从图像中删除所有不重要的信息 参考资料: 让我们看看我的步骤: 1)应用直方图均衡化,以获得histo\u equalized\u image=histoeq(MyGrayImage)。所以强度变化很大 在某种程度上可以处理 2)在历史均衡图像上应用奇异值分解近似值。但在此之前,我应用了svd分解([L D R]=svd(历史均衡图像)),然后使

我的目标是处理图像上的照明和表情变化。因此,我试图实现一个MATLAB代码,以便只处理图像中的重要信息。换句话说,只处理图像上的“有用”信息。为此,必须从图像中删除所有不重要的信息

参考资料:

让我们看看我的步骤:

1)应用直方图均衡化,以获得
histo\u equalized\u image=histoeq(MyGrayImage)
。所以强度变化很大 在某种程度上可以处理

2)
历史均衡图像上应用奇异值分解近似值。但在此之前,我应用了svd分解(
[L D R]=svd(历史均衡图像)
),然后使用这些奇异值使导出图像
J=L*幂(D,I)*R
,其中
I
在1和2之间变化

3)最后,导出图像与原始图像组合为:
C=(MyGrayImage+(a*J))/1+a
。其中,a的变化范围为0到1

4)但上述所有步骤在不同的条件下都不能很好地执行。最后,应该使用小波变换来处理这些变化(我们只使用LL图像块)。低频分量包含有用的信息,也不重要 此组件中的信息丢失。(LL)组件在照明变化和表达式变化时无效

我为此编写了一个matlab代码,我想知道我的代码是正确的还是错误的(如果是,那么如何更正)。此外,我想知道我是否可以优化这些步骤。我们能改进这个方法吗?如果是,怎么做?请告诉我需要帮助

现在让我们看看我的Matlab代码:

  • 您需要定义“有用”或“重要”信息的含义。然后再做一些步骤

  • 直方图均衡化是一种全局变换,它在不同的图像上给出不同的结果。你们可以做一个实验——在图像上做histeq,从中受益。然后将原始图像复制两份,并在第二张上绘制一个黑色正方形(图像面积的30%)和一个白色正方形。然后应用histeq并比较结果

  • 低频分量也包含有用的信息, 不重要的信息在此组件中丢失

    真的吗?边缘和形状-这是(至少对我来说)相当重要的是在高频。我们同样需要“有用”信息的定义

    我看不出你的方法为什么会起作用,以及如何起作用的理论背景。你能解释一下,你为什么选择这种方法吗


    另外,我不确定这篇论文是否与您相关,但推荐Bansal等人的“多尺度图像对比度增强”和V.Vonikakis和I.Andreadis的“多尺度图像对比度增强”。

    您可以阅读这篇文章:“我等待您的答案:”)更好的做法是不要对这篇论文的答案发表评论,而是将重要部分放在问题本身上。关于纸张-首先,它看起来不像是一般的方法,而是一种非常特殊的技术的预处理阶段。第二,它看起来不像一张好纸。也许,对于给定的方法,它可以改善人脸识别的结果,但这并不意味着“总体上改善了图像”。例如,众所周知的SIFT描述符对许多变换都是不变的,但它不能“改善图像”。所以问题是一样的-你的目标是什么,你想归档什么?同样,“我想增强图像”不是定义。提升的标准是什么?更好的分数是一些测试?那是人脸识别吗?然后我下载或重新实现原始SVD人脸识别,然后进行预处理实验。你有识别部分已经工作了吗?我想在光照和表情变化方面增强图像。不幸的是,我没有已经工作的部分:(
    %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.