python - 需要一个可逆图像变换函数,使得:
问题描述
是否存在一个可逆的图像变换函数F,如果我在图像X上应用F ,我会得到Y,并且Y看起来尽可能嘈杂和随机。如果我对Y应用模糊以获得Y*,然后将F (-1) (Y*)用于获得X*,那么X和X*应该尽可能相似(如X的模糊版本)。
我非常感谢我能得到的任何帮助
解决方案
您可以尝试这样做: 1. 计算图像的傅里叶变换。2. 对于每个频率,在不改变幅度的情况下,伪随机地(以特殊方式)移相。3. 进行傅里叶逆变换。我们会得到一个嘈杂的图像。如果我们过滤它,例如,使用高斯滤波器,那么我们可以恢复(知道伪随机相移函数)原始平滑图像。我测试了这个想法并编写了 Octave/Matlab 代码:
img=imread('Lena.png');
mag=abs(fft2(img));
ang=angle(fft2(img)); %phase
ns=angle(fft2(rand(size(img))));%phase random matrix
noise=mag.*exp(i*(ang+ns));
noise_img=uint8(abs(ifft2(noise))); %noise image
% add blur
f=fspecial('gaussian', 7, 3); % gaussian filter 7x7
noise_img_gauss=imfilter(noise_img, f); %noise image with gaussian blur
% recovery image
mag=abs(fft2(noise_img_gauss));
ang=angle(fft2(noise_img_gauss));
recov=mag.*exp(i*(ang-ns));
img_recovery=uint8(abs(ifft2(recov)));
imwrite(img_recovery, 'img_recovery.png');
imwrite(noise_img_gauss, 'noise_img_gauss.png');
推荐阅读
- c# - 如何重定向 .nuget 文件夹?以及nuget包和SDK nuget包的区别
- c++ - 模板别名冲突类型。g++ 编译成功,而 clang 失败
- c - 文件 C 中表的背包问题数据存储
- docker - 为什么redis保存后卷文件夹为空?
- hadoop - 如何在 Hive 中找到组的 AVG 并与之进行比较
- php - 如何减少mysql连接数?
- javascript - React 和 SVG 精灵
- python - Numpy,将数组与标量相乘
- google-cloud-platform - cloudsql 到 gcp 托管实例组连接超时
- mysql - Mysql : Join 4 table 问题的结果