Pandas[加深学习]03傅立叶应用【02】cat图片处理

import numpy as np

import numpy.fft as nf

import matplotlib.pyplot as plt

from PIL import Image

#猫的图片(原图)

cat = Image.open('cat.jpeg')

cat.show()

print('cat.jpeg图片的原始数据')

#cat.tobytes()字节,8位 ----->对应最大的数字:-127 - 127

cat_data = np.fromstring(cat.tobytes(),dtype=np.int8)

display(cat_data.shape,cat_data)

#导入傅立叶变换需要的包(fft模块,c实数或复数序列的离散傅里叶变换)

from scipy.fftpack import fft

cat_data_fft = fft(cat_data)

print('经过傅里叶转换,傅里叶转换的结果包含实数,和虚数')

#真实数据,变换成了频率,频域

display(cat_data_fft)

# -7005918.98362136+12604783.28030717j 实数+虚数

# x^2 = 4 ---> -2 / 2

# x^2 = -4 --->虚数

#低频,意味着变化不大;高频,意味着陡变

print('将傅里叶的数据去除低频的波,设置为0')

#条件,有正数、负数,通过abs取绝对值

cond = np.abs(cat_data_fft)<1e5

#根据条件获取索引

inds = np.where(cond)

#修改,将低频数据,设置为0

cat_data_fft[inds] = 0

display(cat_data_ifft)

print('使用傅里叶进行反转')

#使用傅里叶进行反转

from scipy.fftpack import ifft

cat_data_ifft = ifft(cat_data_fft)

display(cat_data_ifft)

print('通过条件转换与傅里叶反转之后,获取实数部分')

#获取实数

cat_data_real = np.real(cat_data_ifft)

display(cat_data_real)

print('对实数,去除小数部分,转换为整数')

#去除小数部分

cat_data_result = np.int8(cat_data_real)

display(cat_data_result)

print('将一维的数组,通过Image进行转换,图片')

#将一维的数组,通过Image进行转换,图片

cat_outline = Image.frombytes(mode = cat.mode,size=cat.size,data=cat_data_result)

cat_outline

输出显示:

 

cat.jpeg图片的原始数据

/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:11: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead

  # This is added back by InteractiveShellApp.init_path()

(1132677,)

array([113,  72,  80, ...,  -7,  -2,  -1], dtype=int8)

经过傅里叶转换,傅里叶转换的结果包含实数,和虚数

array([-22140653.              -0.j        ,

        12232785.72976409-6150913.99594079j,

         1434362.76169597-2058206.78574201j, ...,

         1320812.63407745+5081032.3553913j ,

         1434362.76169597+2058206.78574201j,

        12232785.72976409+6150913.99594079j])

将傅里叶的数据去除低频的波,设置为0

array([ 3.35487594+2.62086253e-15j,  9.28812257-1.50506885e-14j,

       22.17280658-8.79402157e-15j, ..., -7.98816347+3.00866447e-15j,

        4.75353257-2.64462905e-14j, 10.82160959-8.07933903e-15j])

使用傅里叶进行反转

array([ 3.35487594+2.62086253e-15j,  9.28812257-1.50506885e-14j,

       22.17280658-8.79402157e-15j, ..., -7.98816347+3.00866447e-15j,

        4.75353257-2.64462905e-14j, 10.82160959-8.07933903e-15j])

通过条件转换与傅里叶反转之后,获取实数部分

array([ 3.35487594,  9.28812257, 22.17280658, ..., -7.98816347,

        4.75353257, 10.82160959])

对实数,去除小数部分,转换为整数

array([ 3,  9, 22, ..., -7,  4, 10], dtype=int8)

将一维的数组,通过Image进行转换,图片

Out[11]:

仅供参考学习,严禁转载!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值