zoukankan      html  css  js  c++  java
  • PS 滤镜算法— — 表面模糊

    图像的表面模糊处理,其作用是在保留图像边缘的情况下,对图像的表面进行模糊处理。在对人物皮肤处理上,比高斯模糊更有效。因为高斯模糊在使人物皮肤光洁的同时,也将一些边缘特征如脸部的眉毛、嘴唇等给模糊了,不得不用蒙版小心的抹去这些地方的模糊部分。

    在处理手法上,表面模糊也与其它卷积处理手段不同,如高斯模糊等在处理图像时都是采用统一的卷积矩阵进行,而表面模糊却是每一个像素点都有自己的卷积矩阵,而且还是3(4)套,用以对应于像素的R、G、B(A、R、G、B)分量。所以表面模糊在编程处理时,比其它卷积操作更复杂、更耗时,因为它要对每一个像素计算自己的卷积矩阵。表面模糊编程的难点也在计算卷积矩阵上,其它与一般图像卷积处理一样。

    表面模糊处理有2个参数,即模糊半径和模糊阈值,前者确定模糊的范围,后者确定模糊的程度。模糊范围就是卷积矩阵大小,如模糊半径为1,则模糊矩阵直径为 1×2+1=3,矩阵元素个数为3×3=9,矩阵的中间元素即是当前像素点。

    矩阵元素值的计算公式为:

    wij=1(|IijI0|)2.5T

    其中,T 是阈值,wij 是模板矩阵的元素值,也可以称为权重, Iij 是图像值, I0 是模板矩阵中心的图像值。一般来说,wij 会做一个预处理:

    wij=max(0,wij)

    根据卷积运算,每一个像素通过表面模糊之后的值为:

    Inew=wijIijwij

    clc;
    clear all;
    close all;
    
    addpath('E:Visual EffectsPS Algorithm');
    
    Img=imread('1.jpg');
    Img=double(Img);
    imshow(Img/255);
    
    img_out=Img;
    
    R=Img(:, :, 1);
    G=Img(:, :, 2);
    B=Img(:, :, 3);
    
    radi=5;
    thre=25;
    
    img_out(:, :, 1)=Surface_Blur(R, radi, thre);
    img_out(:, :, 2)=Surface_Blur(G, radi, thre);
    img_out(:, :, 3)=Surface_Blur(B, radi, thre);
    
    figure, imshow(img_out/255);
    
    
    %% surface blur
    
    function I_out=Surface_Blur(I_in, radi, thre)
    
    
    [r, c]=size(I_in);
    
    I_out=I_in;
    
    
    for ii=1+radi : r-radi
        for jj=1+radi : c-radi
    
                patch=I_in (ii-radi:ii+radi, jj-radi:jj+radi);
    
                p0=I_in(ii, jj);
    
                mask_1= repmat(p0, 2*radi+1, 2*radi+1);
    
                mask_2=1-abs(patch-mask_1)/(2.5*thre);
    
                mask_3=max(mask_2, 0);
    
                I_out(ii, jj)=sum(sum(patch.*mask_3))/sum(mask_3(:));
    
        end    
    end
    

    原图:

    这里写图片描述

    效果图:

    这里写图片描述

  • 相关阅读:
    (BFS 二叉树) leetcode 515. Find Largest Value in Each Tree Row
    (二叉树 BFS) leetcode513. Find Bottom Left Tree Value
    (二叉树 BFS DFS) leetcode 104. Maximum Depth of Binary Tree
    (二叉树 BFS DFS) leetcode 111. Minimum Depth of Binary Tree
    (BFS) leetcode 690. Employee Importance
    (BFS/DFS) leetcode 200. Number of Islands
    (最长回文子串 线性DP) 51nod 1088 最长回文子串
    (链表 importance) leetcode 2. Add Two Numbers
    (链表 set) leetcode 817. Linked List Components
    (链表 双指针) leetcode 142. Linked List Cycle II
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412452.html
Copyright © 2011-2022 走看看