GFDF 基于导向滤波检测聚焦区域的多焦图像融合

python3.7.6

opencv-python~=4.5.5.62
numpy~=1.19.3

代码:

#  https://www.sciencedirect.com/science/article/abs/pii/S0923596518302832
#  GFDF 基于导向滤波检测聚焦区域的多焦图像融合
import numpy as np
import cv2

# 读取图片
img_path = ["../PS/11/4.JPG", "../PS/11/2.JPG", "../PS/11/3.JPG", "../PS/11/1.JPG"]  # 此处为待合成的图片路径列表
imgs = [cv2.imread(img) for img in img_path]
imgs_gray = [cv2.imread(img, 0) for img in img_path]

#  均值滤波
#  对每张单层图像分别使用均值滤波进行平滑
imgs_blur = []
for i, img in enumerate(imgs_gray):
    img = cv2.blur(img, ksize=(25, 25))
    imgs_blur.append(img)
    # cv2.namedWindow('blur'+str(i), cv2.WINDOW_NORMAL)
    # cv2.imshow("blur"+str(i), img)

#  获取粗略的聚焦图
#  使用原图和平滑图相减获取粗略的聚焦图,原图中的模糊区域,平滑后仍是模糊的
imgs_rfm = []
for i in range(len(imgs_gray)):
    img1 = cv2.subtract(imgs_blur[i], imgs_gray[i])
    img2 = cv2.subtract(imgs_gray[i], imgs_blur[i])
    img = cv2.add(img1, img2)
    imgs_rfm.append(img)
    # cv2.namedWindow('rfm'+str(i), cv2.WINDOW_NORMAL)
    # cv2.imshow("rfm"+str(i), img*5)

#  导向滤波
#  将原图作为导向图,通过导向滤波器向粗略的聚焦图中添加更多的高频信息,从而优化高频部分的融合效果
imgs_afm = []
for i in range(len(imgs_gray)):
    img = cv2.ximgproc.guidedFilter(imgs_gray[i], imgs_rfm[i], 10, 2, -1)
    imgs_afm.append(img)
    # cv2.namedWindow('afm'+str(i), cv2.WINDOW_NORMAL)
    # cv2.imshow("afm"+str(i), img*5)

#  决策图生成
#  通过比较聚焦图中每个像素值大小的方式决定融合图中的像素主要来自于哪一张单层图
imgs_idm = []
img_max = imgs_afm[0].copy()
for i in range(len(imgs_afm)):
    idx = img_max < imgs_afm[i]
    img_max[idx] = imgs_afm[i][idx]
for i, img in enumerate(imgs_afm):
    ret, img = cv2.threshold(cv2.subtract(img_max, img), 0, 1, cv2.THRESH_BINARY_INV)
    imgs_idm.append(img)
    # cv2.namedWindow('idm'+str(i), cv2.WINDOW_NORMAL)
    # cv2.imshow("idm"+str(i), img*255)

#  拼接
img = imgs[0].copy()
for i in range(len(imgs)):
    imgs[i] = cv2.bitwise_and(imgs[i], imgs[i], mask=imgs_idm[i])
    idx = (imgs[i] != 0)
    img[idx] = imgs[i][idx]

cv2.namedWindow('result', cv2.WINDOW_NORMAL)
cv2.imshow("result", img)

cv2.waitKey(0)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值