网易首页 > 网易号 > 正文 申请入驻

使用OpenCV傅里叶变换改善图像亮度/曝光

0
分享至

来源:市场资讯

(来源:OpenCV与AI深度学习)

视觉/图像重磅干货,第一时间送达!


傅立叶变换

傅里叶变换将波形(基本上是任何现实世界的波形)分解为正弦波。也就是说,傅里叶变换为我们提供了另一种表示波形的方式。对于数字图像,频率概念与图像细节有关,即低频表示一般形状,高频表示更精确的细节。

此外,用于数字数据的离散傅里叶变换 (DFT) 呈现了一幅新的图像,其中存在噪声或瑕疵,这些噪声或瑕疵在空间域上不易处理或看到。为了举例说明,让我们看看 DFT 如何表示莫尔条纹,即图像上的周期性噪声。下面显示的这种图案是旧时打印图像的一种特征。


上面的 DFT 结果有点嘈杂,但对于理解和可用性来说已经足够了。因此,可以在灰色平面图的中间看到对称的点组,这些点代表周期性的莫尔噪声。因此,可以使用特殊的过滤器去除这些点,如果去除这些点并进行逆 DFT,就会得到一个新的无噪声图像。

同态滤波

在简要介绍完这个概念之后,提出了一种使用 DFT 实现同态滤波器的方法。这是一种在有大量阴影的图片上改善闪电曝光的方法。

图像的每个像素都可以用照度和反射率分量来表示。照度i(x,y)表示像素上的光量,在空间中变化缓慢。而反射率r(x, y)表示反射了多少光。该分量与反射光的材料密切相关,并且可以快速变化。

因此,每个像素都可以理解为这两个成分的混合:

这样,为了修复场景中的照明,不仅需要增加照度分量,因为它与反射率混合;将 DFT 应用于图像,我们不会分离这些分量。

问题比这更难。没有太多的数学知识,我给出了生成过滤图像的总结:


为频域中的同态滤波器 H(u, v):



其中,根据公式:


然而,经过过滤的图像来自:


此外,下面通过直方图逐步表示:


现在我将逐步解释如何实现数字图像的 DFT;但首先让我们回顾一下数字图像的坐标是如何表示的。在第一部分的介绍中,我提到数字图像的 (0,0) 坐标位于左上角。如果我们像这样对图像进行 DFT,则生成的图像的中心将不会位于图像中心。因此,为了帮助这种可视化和过滤应用,它被制作成下图所示的形状,因此我们得到了一个以中心为中心的图像。(上面的莫尔条纹的傅立叶图已经是那样了)。


虽然这项技术意味着要对图像进行平方,但这个过程可以通过后面介绍的内置 OpenCV 函数来完成。现在,在实施之前,还有一点需要注意,那就是根据图像大小,DFT 计算有一些优化。OpenCV 确认 2、3 和 5 的倍数会产生更好的结果,因此还需要重新计算图像大小,并且很可能进行填充。

import cv2import numpy as npfrom math import exp, sqrtimage = cv2.imread("teste.jpg", 0)height, width = image.shapedft_M = cv2.getOptimalDFTSize(height)dft_N = cv2.getOptimalDFTSize(width)#Filter parametersyh, yl, c, d0, = 0, 0, 0, 0#User parametersy_track, d0_track, c_track = 0, 0, 0complex = 0

首先,让我们读取一张曝光不良的黑白图像,获取其最佳 DFT 大小,并启动使用过滤器所需的一些全局变量。

def main():    #copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]])     #BORDER_CONSTANT = Pad the image with a constant value (i.e. black or 0)    padded = cv2.copyMakeBorder(image, 0, dft_M - height, 0, dft_N - width, cv2.BORDER_CONSTANT, 0)     padded = np.log(padded + 1) #so we never have log of 0    global complex    complex = cv2.dft(np.float32(padded)/255.0, flags = cv2.DFT_COMPLEX_OUTPUT)    complex = np.fft.fftshift(complex)    img = 20 * np.log(cv2.magnitude(complex[:,:,0], complex[:,:,1]))    cv2.namedWindow('Image', cv2.WINDOW_NORMAL)    cv2.imshow("Image", image)    cv2.resizeWindow("Image", 400, 400)    cv2.namedWindow('DFT', cv2.WINDOW_NORMAL)    cv2.imshow("DFT", np.uint8(img))    cv2.resizeWindow("DFT", 250, 250)    cv2.createTrackbar("YL", "Image", y_track, 100, setyl)    cv2.createTrackbar("YH", "Image", y_track, 100, setyh)    cv2.createTrackbar("C", "Image", c_track, 100, setc)    cv2.createTrackbar("D0", "Image", d0_track, 100, setd0)    cv2.waitKey(0)         cv2.destroyAllWindows()

现在,有了理想的尺寸,我们可以用常数值在底部和右侧为图像设置新的边框尺寸(无论如何都可以这样做)。填充后,我们可以转换到频域,然后进行前面提到的移位,以便更好地表示(doc)。一个更复杂的想法是在显示结果之前进行操作,因为我们有实数和复数维度的值。



现在,有了图像和 DFT,是时候实现过滤器本身了。代码已根据之前的解释进行了注释。

def homomorphic():    global yh, yl, c, d0, complex    du = np.zeros(complex.shape, dtype = np.float32)    #H(u, v)    for u in range(dft_M):        for v in range(dft_N):            du[u,v] = sqrt((u - dft_M/2.0)*(u - dft_M/2.0) + (v - dft_N/2.0)*(v - dft_N/2.0))    du2 = cv2.multiply(du,du) / (d0*d0)    re = np.exp(- c * du2)    H = (yh - yl) * (1 - re) + yl    #S(u, v)    filtered = cv2.mulSpectrums(complex, H, 0)     #inverse DFT (does the shift back first)    filtered = np.fft.ifftshift(filtered)    filtered = cv2.idft(filtered)    #normalization to be representable     filtered = cv2.magnitude(filtered[:, :, 0], filtered[:, :, 1])    cv2.normalize(filtered, filtered, 0, 1, cv2.NORM_MINMAX)    #g(x, y) = exp(s(x, y))    filtered = np.exp(filtered)    cv2.normalize(filtered, filtered,0, 1, cv2.NORM_MINMAX)    cv2.namedWindow('homomorphic', cv2.WINDOW_NORMAL)    cv2.imshow("homomorphic", filtered)    cv2.resizeWindow("homomorphic", 600, 550)

然后,负责在用户更改轨迹栏时更改其参数的函数将调用同态函数。轨迹栏在主函数中定义,并采用限制、与栏相关的函数和与实际值相对应的变量。栏按模式保持在 0-100 范围内,并负责更改过滤器的参数。


defsetyl(y_track):globalylyl = y_trackifyl == 0:yl = 1ifyl > yh:yl = yh - 1homomorphic()defsetyh(y_track):globalyhyh = y_trackifyh == 0:yh = 1ifyl > yh:yh = yl + 1homomorphic()defsetc(c_track):globalcc = c_track/100.0ifc == 0:c_track = 1    homomorphic()defsetd0(d0_track):globald0d0 = d0_trackifd0 == 0:d0 = 1homomorphic()

D0、C、YL 和 YH 是合理的参数,它们的实现并不是为了非常精确地处理用户输入,也就是说,它们是为了体验而实现的。

对于所有参数,即使用户设置了,也不允许变为 0,这样它就不会抵消其效果。C 参数的规模被缩小,因为它比其他参数对饱和度更敏感,而 YL — YH(分别表示伽马低和高)的实现方式是它们总是一个大于另一个。

经过调整后,照片的曝光效果如预期般好了很多。黑色边框是为了解决优化问题而实施的填充,不会干扰滤波器计算。


特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
因凡蒂诺世界杯飞行近6万英里:43场球赛、16座球场,绕地球2.5圈

因凡蒂诺世界杯飞行近6万英里:43场球赛、16座球场,绕地球2.5圈

甜份超标的我
2026-07-20 00:01:24
德黑兰的扳手:为何让人讨厌

德黑兰的扳手:为何让人讨厌

民间胡扯老哥
2026-06-18 06:32:28
张凌赫新剧口碑崩塌,S+长剧拍出短剧味,AI滥用太敷衍

张凌赫新剧口碑崩塌,S+长剧拍出短剧味,AI滥用太敷衍

影视地平线
2026-07-19 15:09:02
贺龙资历突出,为何解放战争没受重用?因造成过一次严重军事失败

贺龙资历突出,为何解放战争没受重用?因造成过一次严重军事失败

阿胡
2025-02-17 15:07:05
伊布炮轰转会费失控:罗杰斯都值1.17亿镑?那亚马尔他们呢

伊布炮轰转会费失控:罗杰斯都值1.17亿镑?那亚马尔他们呢

伟少说球
2026-07-19 21:09:51
香港名媛林恬儿疑婚变,老公删除恩爱合照,母亲谢玲玲点赞证实

香港名媛林恬儿疑婚变,老公删除恩爱合照,母亲谢玲玲点赞证实

娱乐圈圈圆
2026-07-18 17:15:46
首例5胞胎长大了,父亲已劳累去世,母亲直言:如能重来一个也不要

首例5胞胎长大了,父亲已劳累去世,母亲直言:如能重来一个也不要

柳絮忆史
2025-07-22 07:15:03
Anthropic狠砍一刀:Claude Fable 5订阅额度骤降67%,Pro用户被推向API

Anthropic狠砍一刀:Claude Fable 5订阅额度骤降67%,Pro用户被推向API

像素与芯片
2026-07-19 02:12:47
做个人!35岁坎特0出场告别世界杯,德尚赛后摸头安抚坎特面露微笑

做个人!35岁坎特0出场告别世界杯,德尚赛后摸头安抚坎特面露微笑

818体育
2026-07-19 11:46:30
31岁辛杜横扫山口茜,夺日本公开赛冠军成印度第一人

31岁辛杜横扫山口茜,夺日本公开赛冠军成印度第一人

日常碎碎念啊
2026-07-20 01:35:57
王室专家曝哈里梅根与查尔斯重聚“并不全是温情”,4年来首次全家相见却提前离场

王室专家曝哈里梅根与查尔斯重聚“并不全是温情”,4年来首次全家相见却提前离场

浅遇时光
2026-07-19 01:11:41
从今天起,中国不再需要日本道歉!这觉醒,来自3500万亡魂的重量

从今天起,中国不再需要日本道歉!这觉醒,来自3500万亡魂的重量

北纬的咖啡豆
2026-05-15 09:45:32
没有他,中国历史或被改写,他被判死刑,毛主席大怒:立即放人

没有他,中国历史或被改写,他被判死刑,毛主席大怒:立即放人

元哥说历史
2026-07-16 09:30:07
俄军对基辅目标实施特别军事行动以来最大规模打击

俄军对基辅目标实施特别军事行动以来最大规模打击

俄罗斯卫星通讯社
2026-07-19 16:20:34
笑麻了!暑假工已成功潜入各行各业,网友:这是能说的吗

笑麻了!暑假工已成功潜入各行各业,网友:这是能说的吗

夜深爱杂谈
2026-07-18 20:54:26
太惨烈!1-6月纯电车销量榜:小米YU7第4,秦L第38,汉跌至第80名

太惨烈!1-6月纯电车销量榜:小米YU7第4,秦L第38,汉跌至第80名

趣味萌宠的日常
2026-07-19 12:35:41
杨紫带爸妈游纽约!中央车站合影太温馨,一到爸妈身边秒变小孩

杨紫带爸妈游纽约!中央车站合影太温馨,一到爸妈身边秒变小孩

动物奇奇怪怪
2026-07-19 06:20:08
为什么都在唱衰高层住宅?网友:自然规律人越多出神人的概率越大

为什么都在唱衰高层住宅?网友:自然规律人越多出神人的概率越大

另子维爱读史
2026-07-17 19:27:03
二胎、三胎催生无果,国家换新思路!马光远“新方案”得到支持

二胎、三胎催生无果,国家换新思路!马光远“新方案”得到支持

快乐彼岸
2026-07-18 19:01:46
伦敦足球网:切尔西内部认为恩佐价值高于三位中场

伦敦足球网:切尔西内部认为恩佐价值高于三位中场

懂球帝
2026-07-19 21:05:17
2026-07-20 03:04:49
新浪财经 incentive-icons
新浪财经
新浪财经是一家创建于1999年8月的财经平台
4119842文章数 8884关注度
往期回顾 全部

科技要闻

Kimi K3单项登顶 整体落后前沿模型2-3个月

头条要闻

网友称草原有人驱赶分食马匹尸体的秃鹫 官方回应

头条要闻

网友称草原有人驱赶分食马匹尸体的秃鹫 官方回应

体育要闻

世界杯决赛,从“澡盆德比”500年前讲起

娱乐要闻

王侃因病逝世 两年前与父亲牛犇同台

财经要闻

任泽平VIP会员自称爆仓巨亏千万

汽车要闻

被追尾还能自动加速逃生?华为乾崑智驾ADS 5.0 OTA时间表发布,只有这台车不用等!

态度原创

时尚
本地
亲子
游戏
家居

除了机车包,Balenciaga的服装才是真正顶流

本地新闻

十年了,为什么鬼怪CP还能让人美美嗑上?

亲子要闻

宝蓝和叔叔抢玩具车,叔叔不给,宝蓝自己组装了一个漂亮的玩具车

BLG输DK全队气氛爆炸,知情人爆料战队签约新上单,Bin丢掉首发?

家居要闻

2026建博会(广州) 公装联探展交流活动

无障碍浏览 进入关怀版