week6-基础图像处理

简介:大概介绍三种图像处理基本操作

  • 旋转
  • 错切
  • 直方图均值化

旋转

对于旋转变换,我们可以同样将其想象成二维平面上矢量的旋转。如下图所示,矢量[x1,y1]逆时针旋转θ度到了[x2,y2]。
在这里插入图片描述
可以在baidu上找到旋转矩阵公式如下:
在这里插入图片描述操作对象矩阵

在这里插入图片描述
对其进行45°旋转,实现代码如下。

# coding:utf-8

import numpy as np

img = np.array([
    [59, 60, 58, 57],
    [61, 59, 59, 57],
    [62, 59, 60, 58],
    [59, 61, 60, 56]])
h, w = img.shape[0], img.shape[1]#取长和宽

###图像旋转

angle = 45*np.pi/180
newW = int(w*abs(np.cos(angle)) + h*abs(np.sin(angle))) + 1
newH = int(w*abs(np.sin(angle)) + h*abs(np.cos(angle))) + 1#新的长宽
dst = np.zeros((newH, newW), int)

trans1 = np.array([[1, 0, 0],[0, -1, 0], [-0.5*w, 0.5*h, 1]])#创建narray对象矩阵
trans1 = trans1.dot(np.array([[np.cos(angle), -np.sin(angle), 0], [np.sin(angle), np.cos(angle), 0], [0, 0, 1]]))#旋转矩阵点乘
trans1 = trans1.dot(np.array([[1, 0, 0],[0, -1, 0], [0.5*newW, 0.5*newH, 1]]))#重构新矩阵
for x in range(w):
    for y in range(h):
        newPos = np.array([x, y, 1]).dot(trans1)
        dst[int(newPos[1])][int(newPos[0])] = img[y][x]
print(img)
print(dst)

运行结果如图
在这里插入图片描述

错切

错切是在某方向上,按照一定的比例对图形的每个点到某条平行于该方向的直线的有向距离做放缩得到的平面图形。
在这里插入图片描述

在这里插入图片描述

trans1 = trans1.dot(np.array([[1, 0, 0], [-np.tan(angle), 1, 0], [0, 0, 1]]))#换一个变换矩阵即可。

直方图均值化

具体介绍可以百度。

# coding:utf-8
import cv2
import numpy as np
img = np.array([
    [1, 5, 255, 225, 100, 200, 255, 200],
    [1, 7, 254, 255, 100, 10, 10, 9],
    [3, 7, 10, 100, 100, 2, 9, 6],
    [3, 6, 10, 10, 9, 2, 8, 2],
    [2, 1, 8, 8, 9, 3, 4, 2],
    [1, 0, 7, 8, 8, 3, 2, 1],
    [1, 1, 8, 8, 7, 2, 2, 1],
    [2, 3, 9, 8, 7, 2, 2, 0]])

#首先我们将二维灰度图转换成一维向量
img_1D = img.flatten()
#向量计算长度及对一维向量整数化 下面会用到
img_gray_1D_len = img_1D.shape[0]
img_gray_1D_int = (img_1D + 0.5).astype(np.uint8)
#建立一个像素占比的数组并计算,对0~255这256个像素值计算图像的像素占比
Psk = np.zeros(256)
for i in range(img_1D.shape[0]):
    Psk[(img_gray_1D_int[i])] += 1
Psk = [Psk[i] / img_gray_1D_len for i in range(256)]
#这里我们 np.sum(Psk)会得到1.0 也就是所有像素比的和是100%
#计算每个像素所有前像素的累计概率
cdf = np.zeros(256)
cdf[0] = Psk[0]
for i in range(255):
    cdf[i + 1] = cdf[i] + Psk[i + 1]
#目的图像像素为灰度累计分布的最大灰度级(255)
#计算目标像素 并将一维向量还原成二维的灰度图
#img_side是图像的边
g_1D_re = np.array([255 * cdf[img_gray_1D_int[i]] for i in range(len(img_1D))])
img_1D_re = img_1D_re.astype(np.uint8)
img_1D_re = img_1D_re.reshape(8,8)
#img_re = img_gray_1D_re.reshape((img_side,-1))
print(img_1D_re)

题目:请对其进行灰度直方图的均衡化处理。在这里插入图片描述
输出结果

[[ 39 111 255 239 227 235 255 235]
 [ 39 139 243 255 227 211 211 191]
 [103 139 211 227 227  83 191 119]
 [103 119 211 211 191  83 171  83]
 [ 83  39 171 171 191 103 107  83]
 [ 39   7 139 171 171 103  83  39]
 [ 39  39 171 171 139  83  83  39]
 [ 83 103 191 171 139  83  83   7]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值