栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【附代码实现】图像差分法

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【附代码实现】图像差分法

文章目录
  • 前言
  • 1.差分法
  • 2.效果图
  • 2.程序

前言

研究生阶段用到了一点图像差分的技术,现在分享出来,算是对工作的一些总结吧

1.差分法

面部表情图像在采集时难免会引入光照、背景等噪声,并且人脸表情自身还存在着个体差异。针对个体差异及环境噪声对抑郁症识别的影响,使用人脸表情图像差分方法,最大化保留人脸表情信息的同时,消除个体差异和环境噪声。实验中选取每个受试者的第一帧图像作为标准帧,其余图像作为被测帧进行图像差分:

  • 针对光线图像噪声等自然条件干扰的影响,使用高斯滤波器对图像进行平滑降噪,抑制噪声。
  • 将被测帧在图像空间域上与标准帧进行差分퐷푓(푥,푦,∇푡_푖 )=푎푏푠[푓(푥,푦,푡_푖 )−푓(푥,푦,푡_0)]。
  • 将差分后的图像灰度值归一化至0-255之间。
  • 形态学处理,利用腐蚀和膨胀处理提取差分图像的边缘信息。
2.效果图

2.程序
import os
import cv2
import numpy as np

# 指定GPU
# os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"          #按照PCI_BUS_ID顺序从0开始排列GPU设备
# os.environ["CUDA_VISIBLE_DEVICES"] = "2"                #使用第3块GPU进行训练

def generate_flow(src, des): # 以个体为单位生成光流图
    """

    :param src: 原图每个个体的文件夹路径
    :param des: 差分图每个个体的文件夹路径
    :return:
    """
    def mkfile(file):
        if not os.path.exists(file):
            os.makedirs(file)

    file_list=os.listdir(src)
    file_list = sorted(file_list)

    # 获取第一帧
    frame1 = cv2.imread(os.path.join(src, file_list[0]))

    for file in file_list:
        # 选取第一帧作为背景图
        background_img = frame1.astype(np.int16)
        # 对背景图高斯滤波
        #background_img_blur = cv2.GaussianBlur(background_img, (3, 3), 0)
        path = os.path.join(src, file)
        # 读取前景图片
        front_image = cv2.imread(path).astype(np.int16)
        # 对前景图高斯滤波
        #front_image_blur = cv2.GaussianBlur(front_image, (3, 3), 0)
        # 图像差分
        differ_image = cv2.absdiff(front_image, background_img)
        # # 二值化处理,用OTSU自动寻找阈值,th2为返回的图像
        # ret2, differ_image = cv2.threshold(differ_image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
        # # #
        # 把灰度值归一化到0~255
        differ_image = cv2.normalize(differ_image, None, 0, 255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC3)
        # 形态操作
        kernel = np.ones((1, 1), np.uint8)
        differ_image = cv2.morphologyEx(differ_image, cv2.MORPH_OPEN, kernel)
        mkfile(des)
        # 写入新的文件夹
        try:
            cv2.imwrite(os.path.join(des, file), differ_image)
        except Exception as e:
            continue

        prvs = next
    print('img number:%d' % len(os.listdir(des)))

original_dir_path = r"C:UsersycDesktopzong"
flow_dir_path = r"C:UsersycDesktopshengcheng"

for root, s_dirs, _ in os.walk(original_dir_path, topdown=True):
    s_dirs = sorted(s_dirs)
    print (s_dirs)
    for sub_dir in s_dirs:
        sub_dir_path = os.path.join(root, sub_dir)  # 原图每个个体文件夹的绝对路径
        flow_dir_path_geti = os.path.join(flow_dir_path, sub_dir)
        generate_flow(sub_dir_path, flow_dir_path_geti)
        print('%s is finished!' % sub_dir)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/929331.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号