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

使用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.

相关推荐
热点推荐
绵阳官方发布通报,全面梳理“笔试第一落选”事件始末:经调查确认成绩有效,过程中存在不严谨不细致的问题,已责成主管部门对相关人员批评教育和谈话提醒

绵阳官方发布通报,全面梳理“笔试第一落选”事件始末:经调查确认成绩有效,过程中存在不严谨不细致的问题,已责成主管部门对相关人员批评教育和谈话提醒

大风新闻
2026-07-19 13:43:03
中年男女发生过了关系,还可以做朋友吗?

中年男女发生过了关系,还可以做朋友吗?

叶飞飞情感屋
2026-07-18 18:21:31
韩红基金会把物资全捐给了“不差钱”的医院?官方辟谣:12辆救护车的受赠主体为乡镇卫生院 兵团团场医院

韩红基金会把物资全捐给了“不差钱”的医院?官方辟谣:12辆救护车的受赠主体为乡镇卫生院 兵团团场医院

闪电新闻
2026-07-19 12:50:35
“这才是政审的意义!”女子考公上岸后,被高中欺负过的同学举报

“这才是政审的意义!”女子考公上岸后,被高中欺负过的同学举报

妍妍教育日记
2026-07-17 08:25:14
笑麻了!暑假工已成功潜入各行各业,网友:这是能说的吗

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

夜深爱杂谈
2026-07-18 20:54:26
世界排名135位的郑钦文,越来越像一位世界排名135位的球员?

世界排名135位的郑钦文,越来越像一位世界排名135位的球员?

林子说事
2026-07-19 00:24:49
菲律宾逼中国删猴子视频!外交部国防部集体炸锅,没点名也破防?

菲律宾逼中国删猴子视频!外交部国防部集体炸锅,没点名也破防?

相思赋予谁a
2026-07-19 01:54:40
美国立法永久禁止中国汽车进入市场!福特掌门人,打不过玩脏的!

美国立法永久禁止中国汽车进入市场!福特掌门人,打不过玩脏的!

启迪你的思维
2026-07-19 06:59:47
4-6后,姆巴佩官宣恋情:晒26岁西班牙演员女友照片 两人酒店同居

4-6后,姆巴佩官宣恋情:晒26岁西班牙演员女友照片 两人酒店同居

念洲
2026-07-19 13:08:26
成都看病的水有多深?一个外地人跑了5家医院,总结出10条铁规矩

成都看病的水有多深?一个外地人跑了5家医院,总结出10条铁规矩

鬼菜生活
2026-07-19 11:09:37
五味杂陈!杭州夜市两年轻女孩陪酒谋生视频引热议,网友:不是简单的职场内卷,是成年人最卑微的生存妥协

五味杂陈!杭州夜市两年轻女孩陪酒谋生视频引热议,网友:不是简单的职场内卷,是成年人最卑微的生存妥协

火山詩话
2026-07-18 08:11:20
“孩子都糖化了,你还给她吃饼干”,家长教育方式,病倒了2代人

“孩子都糖化了,你还给她吃饼干”,家长教育方式,病倒了2代人

熙熙说教
2026-07-18 13:42:35
莫迪政府摊牌了?前驻华大使:宁从中国购买技术,也不能信任美国

莫迪政府摊牌了?前驻华大使:宁从中国购买技术,也不能信任美国

阿晪美食
2026-07-19 03:36:19
90岁牛犇痛失次子王侃!大儿子成晚年唯一依靠,王侃女儿已32岁

90岁牛犇痛失次子王侃!大儿子成晚年唯一依靠,王侃女儿已32岁

东方不败然多多
2026-07-19 10:12:27
加紧救援,全力搜寻!重庆彭水山体崩塌抢险最新消息→

加紧救援,全力搜寻!重庆彭水山体崩塌抢险最新消息→

海外网
2026-07-19 10:45:46
台专家“善意提醒”大陆:如果伊朗买歼10CE战机,最好用现金交易

台专家“善意提醒”大陆:如果伊朗买歼10CE战机,最好用现金交易

范櫳舍长
2026-07-19 12:48:29
新郎拒付16万下车礼走人,半年后街头偶遇新娘,两人都愣住了

新郎拒付16万下车礼走人,半年后街头偶遇新娘,两人都愣住了

云端小院
2026-07-19 07:56:06
“三伏热不热,就看六月初六”,今日六月初六,今夏三伏热到哭?

“三伏热不热,就看六月初六”,今日六月初六,今夏三伏热到哭?

户外阿崭
2026-07-19 07:00:11
135亿罚单,642艘船跑路!美国帮巴拿马的追责成笑话

135亿罚单,642艘船跑路!美国帮巴拿马的追责成笑话

史智文道
2026-07-19 11:35:12
他为《战神》增肌40磅,拍戏受伤却只能退出,亚马逊无奈换主角

他为《战神》增肌40磅,拍戏受伤却只能退出,亚马逊无奈换主角

浅遇时光
2026-07-18 01:24:51
2026-07-19 14:55:00
新浪财经 incentive-icons
新浪财经
新浪财经是一家创建于1999年8月的财经平台
4116832文章数 8865关注度
往期回顾 全部

科技要闻

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

头条要闻

罗纳尔多预测世界杯决赛结果:西班牙队将轻松夺冠

头条要闻

罗纳尔多预测世界杯决赛结果:西班牙队将轻松夺冠

体育要闻

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

娱乐要闻

全网都心疼邹市明,再逼他支棱了

财经要闻

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

汽车要闻

把中国超跑卖到英国,比亚迪正在被世界看见

态度原创

时尚
健康
数码
家居
手机

伊姐周六热推:电视剧《雀骨》;电影《功夫女足》......

刮痧也会刮出脑梗?讲个真实案例

数码要闻

微软发布Win11 KB5121767补丁,修复部分戴尔电脑过热关机问题

家居要闻

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

手机要闻

苹果二季度国内出货量逆势大涨!iPhone 17系列销量突破3776万台

无障碍浏览 进入关怀版