【matlab 图像处理】图像锐化

图像锐化

对人眼视觉系统的研究表明,人类对形状的感知一般通过识别边缘、轮廓、前景和背景而形成。在图像处理中,边缘信息也十分重要。边缘是图像中亮度突变的区域,通过计算局部图像区域的亮度差异,从而检测出不同目标或场景各部分之间的边界,是图像锐化,图像分割、区域形状特征提取等技术的重要基础。图像锐化(Image Sharpening)的目的是加强图像中景物的边缘和轮廓,突出图像中的细节或增强被模糊了的细节。

非肤色初步过滤

对非肤色部分进行初步过滤

function Out=FirstFilter(In)  % 第一次滤波
    Out=In;
    [height,width,c] = size(In);  % 获取输入图像尺寸信息
    IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);   % 分别获取三个通道
    for j=1:height
        for i=1:width
            if (IR(j,i)<160/255 && IG(j,i)<160/255 && IB(j,i)<160) && (IR(j,i)>IG(j,i) && IG(j,i)>IB(j,i))    % 分别查看各像素点IR  IB  IG根据取值复制相应像素点值 
                Out(j,i,:)=0;                       % 赋值0
            end
            if IR(j,i)+IG(j,i)>500/255              % IG + IR 值大于500/255 时置输出值为0
                Out(j,i,:)=0;
            end
            if IR(j,i)<70/255 && IG(j,i)<40/255 && IB(j,i)<20/255
                Out(j,i,:)=0;
            end
        end
    end
    figure,imshow(Out);title('非肤色初步过滤'); 
end

【matlab 图像处理】图像锐化_第1张图片

YCgCr空间范围肤色检测

将RGB颜色模型转化为YCgCr颜色模型,使用中值滤波对图像进行中值滤波

function Out=SecondFilter(In)    % 第二次滤波
    IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);         
    [height,width,c] = size(In);     % 获取图像size
    Out=zeros(height,width);          % 根据size创建空矩阵
    for i=1:width
        for j=1:height  
           R=IR(j,i); G=IG(j,i); B=IB(j,i);           % R G B 赋值
           Cg=(-81.085)*R+(112)*G+(-30.915)*B+128;    % 颜色模型转换
           Cr=(112)*R+(-93.786)*G+(-18.214)*B+128;         
           if Cg>=85 && Cg<=135 && Cr>=-Cg+260 && Cr<=-Cg+280       % 根据转换颜色模型后 各值的大小得输出
               Out(j,i)=1;                                          % 对像素值赋值1
           end
        end
    end
    Out=medfilt2(Out,[3 3]);                                         % 中值滤波  中值滤波medfilt2,用法是B = medfilt2(A, [m n]),输入图像A应是二维矩阵,
                                                                     % 程序中输入图像h是由imread得到的I加上噪声得到的,而imread读到的图像I通常是3维RGB图,
                                                                     % 是三维矩阵,因此才出现问题,显示A应该为二维的。
    
    figure,imshow(Out),title('YCgCr空间范围肤色检测');               % 输出图像
end

【matlab 图像处理】图像锐化_第2张图片

肤色与背景图像融合

ImageOrigin(双精度化后图像),DBImage(双边滤波后图像),SkinArea(YCgCr空间范围肤色检测处理后图像)
使用三种分别处理图像进行融合计算

function Out=Fuse(ImageOrigin,DBImage,SkinArea)
    Skin=zeros(size(ImageOrigin));     % 创建与ImageOrigin的size相等的空矩阵
    Skin(:,:,1)=SkinArea;              % 通道赋值
    Skin(:,:,2)=SkinArea;  
    Skin(:,:,3)=SkinArea;
    Out=DBImage.*Skin+double(ImageOrigin).*(1-Skin);    % 输出图像计算公式
    
    figure,imshow(Out);title('肤色与背景图像融合');  % 输出肤色检测图像
end

【matlab 图像处理】图像锐化_第3张图片

双边滤波

双边滤波器用于平滑图像并减少噪声,同时保留边缘,是一种非线性双边滤波器。双边滤波的核函数是空间域核与像素范围域核的综合结果:

  • 在平坦区域,临近像素的像素值的差值较小,对应值域权重接近于1,此时空域权重起主要作用,相当于直接对此区域进行高斯模糊。因此,平坦区域相当于进行高斯模糊。
  • 在边缘区域,临近像素的像素值的差值较大,对应值域权重接近于0,导致此处核函数下降(因),当前像素受到的影响就越小,从而保持了原始图像的边缘的细节信息。
    总体而言,在像素强度变换不大的区域,双边滤波有类似于高斯滤波的效果,而在图像边缘等强度梯度较大的地方,可以保持梯度。
function Out=DBfilt(In)
    [height,width,c] = size(In);    % 获取输入相关参数   高 宽 通道
    win=15;       % 定义双边滤波窗口宽度  
    sigma_s=6; sigma_r=0.1; % 双边滤波的两个标准差参数  
    [X,Y] = meshgrid(-win:win,-win:win);   % 生成二维网格矩阵
    Gs = exp(-(X.^2+Y.^2)/(2*sigma_s^2));  % 计算邻域内的空间权值    
    Out=zeros(height,width,c);             % 生成相关参数的空矩阵
    for k=1:c
        for j=1:height    
            for i=1:width  
                temp=In(max(j-win,1):min(j+win,height),max(i-win,1):min(i+win,width),k);
                Gr = exp(-(temp-In(j,i,k)).^2/(2*sigma_r^2));  % 计算灰度邻近权值        
                % W为空间权值Gs和灰度权值Gr的乘积       
                W = Gr.*Gs((max(j-win,1):min(j+win,height))-j+win+1,(max(i-win,1):min(i+win,width))-i+win+1);   % Gs * Gr  
                Out(j,i,k)=sum(W(:).*temp(:))/sum(W(:));                     
            end
        end  
    end
    figure,imshow(Out),title('双边滤波');
end

【matlab 图像处理】图像锐化_第4张图片

拉普拉斯锐化算子

拉普拉斯锐化图像是根据图像某个像素的周围像素到此像素的突变程度有关,也就是说它的依据是图像像素的变化程度。我们知道,一个函数的一阶微分描述了函数图像是朝哪里变化的,即增长或者降低;而二阶微分描述的则是图像变化的速度,急剧增长下降还是平缓的增长下降。那么据此我们可以猜测出依据二阶微分能够找到图像的色素的过渡程度,例如白色到黑色的过渡就是比较急剧的。

  • 或者用官方点的话说:当邻域中心像素灰度低于它所在的领域内其它像素的平均灰度时,此中心像素的灰度应被进一步降低,当邻域中心像素灰度高于它所在的邻域内其它像素的平均灰度时,此中心像素的灰度应被进一步提高,以此实现图像的锐化处理。

应用:

  • 运用拉普拉斯可以增强图像的细节,找到图像的边缘。但是有时候会把噪音也给增强了,那么可以在锐化前对图像进行平滑处理。
function Out=Sharp(In)

    H=[0 -1 0;-1 5 -1;0 -1 0]; %Laplacian锐化模板  拉普拉斯算子
    Out=imfilter(In,H);   % 拉普拉斯算子锐化滤波
    % Out=Out/3+In;                       % 输出值/3 + 输入值
    % imwrite(Out,'man4.jpg');
    
    figure,imshow(Out),title('Laplacia锐化图像');
end

【matlab 图像处理】图像锐化_第5张图片

你可能感兴趣的:(图像处理matlab,matlab,图像处理,计算机视觉)