似乎可以理解为图像信号的“超外差”:以条纹为载波,把低频的图像信号搬移到载波频率周围。
印象里有个类似的科学问题是:利用结构光照明,实现显微图像突破衍射极限的超分辨率重建。这里有一篇文章可供参考:
周兴, 但旦, 千佳,等. 结构光照明显微中的超分辨图像重建研究[J]. 光学学报, 2017, 37(3):12.
三年前发过一篇帖子,讲怎么用条纹摄影拍摄热气流(https://www.kechuang.org/t/83365)。这个做法比较麻烦的一点是,它需要两张照片:一张没有热气流的照片,和一张有热气流的照片,而且这两张照片要严格对齐,实际操作起来出乎意料的困难。所以当时就希望只用一张照片,实现类似的效果。在那篇帖子的3楼,我提过一个朴素的设想:
没有太具体的想法。感觉上条纹这种东西很有规律性,所以可以用软件生成一组条纹,通过平移旋转,以及轻微扭曲等,和照片里的条纹重叠在一起(比如相关性最高之类的)然后再取差值,也许还可以加一些滤波算法,把条纹带来的高频抖动给去掉。
但是当时没想出来具体的实现方式,所以也就没搞。直到两个月前,又重新看到了这个设想,才突然发现:
“用软件生成一组条纹”,这个条纹不就是傅里叶变换的基函数吗
条纹的平移就是在改基函数的相位;轻微扭曲的条纹相当于一个有一定带宽的信号;“相关性”对应傅里叶变换中那个积分的值,也就是频域的幅度;而“取差值”,其实就是把某些频率分量的幅度设为0。
这样这个设想实现起来就很简单了,只需要找一个2维fft的库,用傅里叶变换把原照片变到频域,然后找到其中幅度最大的信号,把它的值改成0,再用逆变换把它变回普通的照片就行了。
以上一篇帖子 里那张打火机的照片为例,具体操作是这样的:
①把热气流所在的部分截下来,只保留条纹。不能直接用原照片。
②把它变换到频域。直流信号在这张图片的正中心。左右两个最亮的点应该就是图片里的条纹。
③把幅度最大的一部分给改成零。具体操作是把幅度最大的 0.01% 数据给改成零。另外幅度最小的90%也被设成零了,能让噪声小点(不过效果不明显)。
④把改完的频域数据变回照片
⑤送到photoshop里调一下曲线,让热气流更明显一些,然后就结束了。
这个效果确实比之前差很多。不过之前要用两张照片,现在这个只需要一张。如果要处理视频的话,这个方法的好处是,摄像头本身可以动,手持相机也可以用这个办法。相对的,如果是视频两帧相减的办法,则需要相机固定得很好才行。
另外前面提到“不能直接用原照片”,因为直接用的话效果是下面这样的。这是因为照片中没有条纹的区域,会产生大量的宽带的频域信号。此时,前面那种简单的把0.01%的频域数据改成零的操作,会在照片中引入大量周期性的波动,导致啥都看不清。也许可以用小波变换来解决这个问题。
具体的代码是用python写的
重点是下面这句,那个99.99改一下对效果影响比较大。
DropVal[ np.logical_or( (np.abs(DropVal) > np.percentile(np.abs(DropVal),99.99)), (np.abs(DropVal) < np.percentile(np.abs(DropVal),90))) ] = 0
似乎可以理解为图像信号的“超外差”:以条纹为载波,把低频的图像信号搬移到载波频率周围。
印象里有个类似的科学问题是:利用结构光照明,实现显微图像突破衍射极限的超分辨率重建。这里有一篇文章可供参考:
周兴, 但旦, 千佳,等. 结构光照明显微中的超分辨图像重建研究[J]. 光学学报, 2017, 37(3):12.
条纹的傅里叶变换应该是类似周期方波的傅里叶变换吧?这样后期把对应频率的赋值置0后还是会留下不少谐波分量的,可能会影响显示效果。所以生成一个亮度正弦变换的条纹会不会处理后效果更好?
这个条纹的波数可能不是单值的,因为相机成像过程中会引入一定的畸变,引起谱上的展宽。
我觉得可以直接利用摩尔纹拍摄,在屏幕上显示极细的网格,然后用相机拍摄,调整到摩尔纹最清晰的时候,放入热源,这样甚至可以录制视频
引用WernerPleischner发表于7楼的内容这个条纹的波数可能不是单值的,因为相机成像过程中会引入一定的畸变,引起谱上的展宽。
大概就是频谱显像边界,相移显像内部
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |
200字以内,仅用于支线交流,主线讨论请采用回复功能。