【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 ib(j,i)<160) (ir(j,i)>IG(j,i) && IG(j,i)>IB(j,i))    % &#x5206;&#x522B;&#x67E5;&#x770B;&#x5404;&#x50CF;&#x7D20;&#x70B9;IR  IB  IG&#x6839;&#x636E;&#x53D6;&#x503C;&#x590D;&#x5236;&#x76F8;&#x5E94;&#x50CF;&#x7D20;&#x70B9;&#x503C;
                Out(j,i,:)=0;                       % &#x8D4B;&#x503C;0
            end
            if IR(j,i)+IG(j,i)>500/255              % IG + IR &#x503C;&#x5927;&#x4E8E;500/255 &#x65F6;&#x7F6E;&#x8F93;&#x51FA;&#x503C;&#x4E3A;0
                Out(j,i,:)=0;
            end
            if IR(j,i)<70 255 && ig(j,i)<40 ib(j,i)<20 out(j,i,:)="0;" end figure,imshow(out);title('非肤色初步过滤'); < code></70></160>

【matlab 图像处理】图像锐化

YCgCr空间范围肤色检测

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

function Out=SecondFilter(In)    % &#x7B2C;&#x4E8C;&#x6B21;&#x6EE4;&#x6CE2;
    IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);
    [height,width,c] = size(In);     % &#x83B7;&#x53D6;&#x56FE;&#x50CF;size
    Out=zeros(height,width);          % &#x6839;&#x636E;size&#x521B;&#x5EFA;&#x7A7A;&#x77E9;&#x9635;
    for i=1:width
        for j=1:height
           R=IR(j,i); G=IG(j,i); B=IB(j,i);           % R G B &#x8D4B;&#x503C;
           Cg=(-81.085)*R+(112)*G+(-30.915)*B+128;    % &#x989C;&#x8272;&#x6A21;&#x578B;&#x8F6C;&#x6362;
           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 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空间范围肤色检测'); 输出图像 < code></=-cg+280></=135>

【matlab 图像处理】图像锐化

肤色与背景图像融合

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

function Out=Fuse(ImageOrigin,DBImage,SkinArea)
    Skin=zeros(size(ImageOrigin));     % &#x521B;&#x5EFA;&#x4E0E;ImageOrigin&#x7684;size&#x76F8;&#x7B49;&#x7684;&#x7A7A;&#x77E9;&#x9635;
    Skin(:,:,1)=SkinArea;              % &#x901A;&#x9053;&#x8D4B;&#x503C;
    Skin(:,:,2)=SkinArea;
    Skin(:,:,3)=SkinArea;
    Out=DBImage.*Skin+double(ImageOrigin).*(1-Skin);    % &#x8F93;&#x51FA;&#x56FE;&#x50CF;&#x8BA1;&#x7B97;&#x516C;&#x5F0F;

    figure,imshow(Out);title('&#x80A4;&#x8272;&#x4E0E;&#x80CC;&#x666F;&#x56FE;&#x50CF;&#x878D;&#x5408;');  % &#x8F93;&#x51FA;&#x80A4;&#x8272;&#x68C0;&#x6D4B;&#x56FE;&#x50CF;
end

【matlab 图像处理】图像锐化

双边滤波

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

  • 在平坦区域,临近像素的像素值的差值较小,对应值域权重接近于1,此时空域权重起主要作用,相当于直接对此区域进行高斯模糊。因此,平坦区域相当于进行高斯模糊。
  • 在边缘区域,临近像素的像素值的差值较大,对应值域权重接近于0,导致此处核函数下降(因),当前像素受到的影响就越小,从而保持了原始图像的边缘的细节信息。
    总体而言,在像素强度变换不大的区域,双边滤波有类似于高斯滤波的效果,而在图像边缘等强度梯度较大的地方,可以保持梯度。
function Out=DBfilt(In)
    [height,width,c] = size(In);    % &#x83B7;&#x53D6;&#x8F93;&#x5165;&#x76F8;&#x5173;&#x53C2;&#x6570;   &#x9AD8; &#x5BBD; &#x901A;&#x9053;
    win=15;       % &#x5B9A;&#x4E49;&#x53CC;&#x8FB9;&#x6EE4;&#x6CE2;&#x7A97;&#x53E3;&#x5BBD;&#x5EA6;
    sigma_s=6; sigma_r=0.1; % &#x53CC;&#x8FB9;&#x6EE4;&#x6CE2;&#x7684;&#x4E24;&#x4E2A;&#x6807;&#x51C6;&#x5DEE;&#x53C2;&#x6570;
    [X,Y] = meshgrid(-win:win,-win:win);   % &#x751F;&#x6210;&#x4E8C;&#x7EF4;&#x7F51;&#x683C;&#x77E9;&#x9635;
    Gs = exp(-(X.^2+Y.^2)/(2*sigma_s^2));  % &#x8BA1;&#x7B97;&#x90BB;&#x57DF;&#x5185;&#x7684;&#x7A7A;&#x95F4;&#x6743;&#x503C;
    Out=zeros(height,width,c);             % &#x751F;&#x6210;&#x76F8;&#x5173;&#x53C2;&#x6570;&#x7684;&#x7A7A;&#x77E9;&#x9635;
    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));  % &#x8BA1;&#x7B97;&#x7070;&#x5EA6;&#x90BB;&#x8FD1;&#x6743;&#x503C;
                % W&#x4E3A;&#x7A7A;&#x95F4;&#x6743;&#x503C;Gs&#x548C;&#x7070;&#x5EA6;&#x6743;&#x503C;Gr&#x7684;&#x4E58;&#x79EF;
                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('&#x53CC;&#x8FB9;&#x6EE4;&#x6CE2;');
end

【matlab 图像处理】图像锐化

拉普拉斯锐化算子

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

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

应用:

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

    H=[0 -1 0;-1 5 -1;0 -1 0]; %Laplacian&#x9510;&#x5316;&#x6A21;&#x677F;  &#x62C9;&#x666E;&#x62C9;&#x65AF;&#x7B97;&#x5B50;
    Out=imfilter(In,H);   % &#x62C9;&#x666E;&#x62C9;&#x65AF;&#x7B97;&#x5B50;&#x9510;&#x5316;&#x6EE4;&#x6CE2;
    % Out=Out/3+In;                       % &#x8F93;&#x51FA;&#x503C;/3 + &#x8F93;&#x5165;&#x503C;
    % imwrite(Out,'man4.jpg');

    figure,imshow(Out),title('Laplacia&#x9510;&#x5316;&#x56FE;&#x50CF;');
end

【matlab 图像处理】图像锐化

Original: https://blog.csdn.net/weixin_52762273/article/details/125138836
Author: Data艺术家
Title: 【matlab 图像处理】图像锐化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/632327/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球