图像预处理 您所在的位置:网站首页 图像的处理 图像预处理

图像预处理

2023-08-28 03:12| 来源: 网络整理| 查看: 265

文章目录 为什么需要图像预处理?图像预处理流程一,灰度化(1)分量法(2)最大值法(3)平均值法(4)加权平均法 二,几何变换(1)opencv来进行图像的空间变换(2)双线性插值算法实现缩放 三,图像增强(1)频率域法(2)空间域法

为什么需要图像预处理?

图像预处理的主要目的是消除图像中无关的信息,恢复有用的真实信息,增强有关信息的可检测性和最大限度地简化数据,从而改进特征抽取、图像分割、匹配和识别的可靠性。

图像预处理流程

一般的图像预处理步骤为:灰度化 ——>几何变换——>图像增强

一,灰度化

灰度化,在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值、亮度值),灰度范围为0-255。一般有分量法,最大值法,平均值法,加权平均法四种方法对彩色图像进行灰度化。

(1)分量法

三个灰度图像的灰度值是彩色图像中三分量中任意一个分量的亮度值,可以是R分量作为灰度值,也可以是G分量和B分量 f1(i,j)=R(i,j)f2(i,j)=G(i,j)f3(i,j)=B(i,j)

from PIL import Image import numpy as np def image2array(image): """ :param image: 图片 :return: 图片的数组 """ image = np.array(image) return image def array2image(arrimg): """ :param arrimg: 图片的数组 :return: 图片 """ image = Image.fromarray(arrimg.astype('uint8')).convert('RGB') return image def convert2gray(img): """ :param img: 数组形式的图片 :return: 分量法灰度化后的图片数组 """ if len(img.shape) > 2: r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2] gray = r # 可以是r,也可以是g,b return gray else: return img if __name__ == '__main__': image = Image.open("a.jpg") image = image2array(image) image = convert2gray(image) image = array2image(image) image.show() (2)最大值法

f(i,j)=max(R(i,j),G(i,j),B(i,j))

def convert2gray(img): """ :param img: 图片的数组 :return: 最大值法灰度化后的图片数组 """ grayimg = np.zeros(shape=(img.shape[0],img.shape[1])) if len(img.shape) > 2: for i in range(img.shape[0]): for j in range(img.shape[1]): grayimg[i,j] = max(img[i,j][0], img[i,j][1], img[i,j][2]) return grayimg else: return img (3)平均值法

f(i,j)=(R(i,j)+G(i,j)+B(i,j)) /3

def convert2gray(img): """ :param img: 图片的数组 :return: 最大值法灰度化后的图片数组 """ """ :param img: 图片的数组 :return: 平均法灰度化后的图片数组 """ grayimg = np.zeros(shape=(img.shape[0], img.shape[1])) if len(img.shape) > 2: for i in range(img.shape[0]): for j in range(img.shape[1]): grayimg[i, j] = (int(img[i, j][0])+int(img[i, j][1])+int(img[i, j][2]))/3 return grayimg else: return img (4)加权平均法

f(i,j)=0.2989R(i,j)+0.5870G(i,j)+0.1140B(i,j)

def convert2gray(img): """ :param img: 数组形式的图片 :return: 加权平均法灰度化后的图片数组 """ if len(img.shape) > 2: r, g, b = img[:, :, 0], img[:, :, 1], img[:, :, 2] gray = 0.2989 * r + 0.5870 * g + 0.1140 * b return gray else: return img

在这里插入图片描述

二,几何变换

图像几何变换又称为图像空间变换,通过平移、转置、镜像、旋转、缩放等几何变换对采集的图像进行处理,用于改正图像采集系统的系统误差和仪器位置(成像角度、透视关系乃至镜头自身原因)的随机误差。此外,还需要使用灰度插值算法,因为按照这种变换关系进行计算,输出图像的像素可能被映射到输入图像的非整数坐标上。通常采用的方法有最近邻插值、双线性插值和双三次插值

(1)opencv来进行图像的空间变换 #!/usr/bin/python3 # __*__ coding: utf-8 __*__ import cv2 import numpy as np from matplotlib import pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 """ 尺度变换 尺度变换(缩放,拉伸)是调整图像大小,使其变大或变小。 但实际操作时要比想象的复杂一些,因为调整大小带来了像素如何插值(放大)或合并(减少)的问题。 cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR) cv2.INTER_LINEAR 双线性插值法 cv2.INTER_NEAREST 最近邻插值 cv2.INTER_AREA 像素区域重采样(默认) cv2.INTER_CUBIC 双三次插值 cv2.INTER_LANCZ0S4 插值(超过8×8个邻域) """ img1 = cv2.imread("a.jpg") # 绝对尺寸 height,width = img1.shape[:2] res = cv2.resize(img1,(2*width,2*height),interpolation=cv2.INTER_CUBIC) # 相对尺寸 res1 = cv2.resize(img1,None,fx=0.3,fy=0.3) """ 平移 cv2.warpAffine(src, M, dsize) src:输入图像 M:移动矩阵 dsize:输出图像大小 """ tx = 500 ty = 100 M = np.float32([[1,0,tx],[0,1,ty]]) dst = cv2.warpAffine(img1,M,(img1.shape[1]+tx,img1.shape[0]+ty)) tx = 500 ty = 200 M = np.float32([[1,0,tx],[0,1,ty]]) dst1 = cv2.warpAffine(img1,M,(1300,1000)) """ 旋转变换 cv2.getRotationMatrix2D(center, angle, scale) cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst center–表示旋转的中心点 angle–表示旋转的角度degrees scale–图像缩放因子 src – 输入的图像 M – 2 X 3 的变换矩阵. dsize – 输出的图像的size大小 dst – 输出的图像 flags – 输出图像的插值方法(参考尺度变换) borderMode – 图像边界的处理方式 """ rows, cols = img1.shape[:2] # 这里(cols / 2, rows / 2)为旋转中心,60旋转角度,第三个为旋转后的缩放因子 # 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题 M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1) dst2 = cv2.warpAffine(img1, M, (cols, rows)) """ 翻转 cv2.flip(src, flipCode[, dst]) → dst1 src – 输入的图像 dst – 输出的图像 flipCode – 翻转模式: flipCode==0垂直翻转(沿X轴翻转) flipCode>0水平翻转(沿Y轴翻转) flipCode


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有