python实现的简单图像矩阵变换

37 篇文章 3 订阅

在学习《Coding the Matrix》的时候,了解到了矩阵变换在图像中的应用,先分享coursera的视频

链接:http://pan.baidu.com/s/1c23ZKzA 密码:yasi

该门课程的代码在下列网站提供:

Coding the Matrix Resources

因为刚学第一课,这里记录一下。关于矩阵变换网上有好多博文介绍,这里就只是通过python实现一下效果,也让我们可以感性地感受一下矩阵变换在图像处理的应用。

教程提供了image,plotting模块,也就是从上面的网站下载,因为image模块需要png模块,同样需要下载png.py,还有程序使用的图片也是教程提供的img01.png,所以需要在上述网站下载image.py,png.py,plotting,img01.png
因为plotting模块的plot功能是打开浏览器绘图的,这里我重新使用matplotlib的绘图函数scatter写了一遍。而且载入图像使用了opencv,并没有使用教程提供的image,但也写了代码。

'''
    利用matplotlib.pyplot的scatter绘制复平面,首先将复数的实部和虚部提取出来
'''
import numpy as np
import matplotlib.pyplot as plt
import cv2
import os

# 导入image的模块前要切换到image.py所在的路径,同时保证有png.py,另外程序测试用的图片也是网站上的下载的img01.png
os.chdir("d:\\FirefoxDownload")
from image import *     
import plotting       #导入模块plotting
### 使用image.py和plotting.py

I = color2gray(file2image('img01.png'))
r = len(I)
c = len(I[0])
M=[x+y*1j for x in range(c) for y in range(r) if I[r-y-1][x]<120]

plotting.plot([0.6*z for z in M],scale=max(r,c),dot_size=1)   #会打开默认浏览器绘图

### 使用opencv

img = cv2.imread('img01.png',cv2.IMREAD_GRAYSCALE)  #以灰度模式读入
# 不知道什么原因直接读取处理显示的图像同原来的不同,要旋转90度
img = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)   
size = img.shape

IMG = []

for i in range(size[0]):
    for j in range(size[1]):
        if img[i,j]<120:     #灰度值小于120时
            IMG.append((i+j*1j))


## 将复数列表转换出来,提取出实部和虚部
def cmplx2num(cmplx):
    return np.array([[pt.real,pt.imag] for pt in cmplx])

## 绘制复平面下的图像
def cplot(L,c=(1,0,0)):     # c是颜色参数
    k = cmplx2num(L)
    plt.scatter(k[:,0],k[:,1],c=c,s=0.5*np.ones(len(k[:,0])))
    # plt.axis([-200,200,-200,200])

### 使用image的方法
# cplot([1j*1j*z for z in M])
# cplot(M,c=(0,0,1))

### 使用自己处理的方法
#又复数知识知乘上1j就逆时针旋转90度
cplot([1j*z for z in IMG],c=(0.4,0.1,0.3))
cplot([1j*1j*z for z in IMG])
cplot(IMG,c=(0,0,1))

plt.show()

代码最后那里可以乘以复数实现图像的变换。

这里写图片描述

下面是plotting.plot绘制的结果
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值