美颜算法--数字图像处理作业

1. 简答题

请为图中人做美肌处理,去痘或去皱纹。(2选1,或自选图片)

作业内容请包含所用的算法说明,效果图,主要算法的代码,以及对效果图的分析。所有内容用图片或文字的形式提交,不要用附件。

2. 答案


2.1 分析问题
        图一可见大量痘点,痘点在途中属于噪声,考虑首先采用卷积核大小为9的中值滤波器减小声,滤波会导致细节减少以及亮度下降,考虑滤波后与原图相加恢复一定的细节,再对图像进行锐化、对比度增强,经锐化后的图像发丝细节仍然损失很多,考虑到发丝垂直分布,采用sobel算子提取原图中竖直方向的细节后与上述step3得到的图像相加得到最终图像。

2.2 具体步骤及代码

step1. 采用中指滤波器进行平滑滤波去噪,减弱图一的痘痘(噪声),选定kernelsize=9

step2. 上述步骤所得图像与原图按照0.2:0.8的权重相加,恢复一部分细节

融合后
*0.2权重
*0.8权重

step3. 对上述步骤所得图像进行锐化以及对比度增强

增强后

step4. 使用sobel算子的滤波器提取垂直方向的细节(主要是发丝),选定kernelsize=3,scale=0.5,再进行重新整定

sobel算子提取的图像

step5. 将上述两步所得图像进行叠加,得到最终图像

 结果 = “sobel” + “enhanced”

2.3 代码

import cv2
from PIL import Image
from PIL import ImageEnhance
import numpy as np

def facial_dermabrasion_effect(fileName):
    img = cv2.imread(fileName)

    #中值滤波,kersize=9    
    blur_img = cv2.medianBlur(img, 9)                                      

    #按权重叠加图像,原图0.2,去噪后图像0.8
    result_img = cv2.addWeighted(img, 0.2, blur_img, 0.8, 0) 
    cv2.imwrite("fusionimg.jpg", result_img)

    image = Image.open("fusionimg.jpg")
    # 锐化
    enh_img = ImageEnhance.Sharpness(image)              
    image_sharped = enh_img.enhance(2.0)

    # 对比度增强
    con_img = ImageEnhance.Contrast(image_sharped)
    image_con = con_img.enhance(1.15)

    #sobel算子的滤波器提取垂直方向细节,kernelsize=3,scale=0.5
    image_con = np.asarray(image_con)
    img_sobelxy = cv2.Sobel(image_con, cv2.CV_64F, 1, 0,0.5, 3, 0)         
    img_sobelxy = cv2.convertScaleAbs(img_sobelxy)

    image_con = np.asarray(image_con)

    image_con = cv2.addWeighted(img_sobelxy,1,image_con,1,0)
    cv2.imwrite("resultimg.jpg", image_con)
    image_con = Image.open("resultimg.jpg")
    image_con.save("resultimg.jpg")


    img1 = cv2.imread("1.jpg")
    img2 = cv2.imread("resultimg.jpg")
    cv2.imshow("Origin", img1)
    cv2.imshow("After", img2)
    cv2.waitKey()
    cv2.destroyAllWindows()


if __name__ == "__main__":
    facial_dermabrasion_effect('1.jpg')

2.4 最终对比

原图
结果

  • 4
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值