【医学图像处理】5 图像间基本操作(点、算数、几何操作)

图像间操作

  • 1 点操作
  • 2 代数(算数)操作
    • 2.1 加法操作
    • 2.2 减法操作
    • 2.3 乘法操作
    • 2.4 除法操作
  • 3 几何操作
    • 3.1 空间转换
      • 3.1.1 平移变换
      • 3.1.2 旋转变换
      • 3.1.3 缩放变换
      • 3.1.4 仿射变换
      • 3.1.5透射变换
    • 3.2 图像差值

  

1 点操作

  特点: 输入图像和输出图像是点对点的拷贝操作,这个拷贝过程中,灰度值会经过转换操作。这个转换操作可以是线性的也可以是非线性的。可表示成:
在这里插入图片描述
  应用: 对比度增强、对比度拉伸、图像灰度平移(调亮、调暗)、二值化、边缘线、切割。

  案例:线性点操作
  假设一副图像DA,进行线性点操作后得到Da,转换函数可表示为:Da=f(DA)=aDA+b
  a为对比度调节参数,如果a>1那么对比度将会提升(灰度值的差异),如果0   b为灰度值平移项,如果b>0,图像进行了整体调亮操作,如果b<0,图像整体进行调暗。
  案例:非线性点操作
  假设图像非常复杂,可能不是8位图像,可能为12位、16位,这种情况下,图像的像素值可能为-1000,+1000,这种情况下计算机可能只想关注其在正数范围内,因此需要对图像整个的灰度值进行压缩,例:f(x)=x+C(Dm-x)
  x是输入图像的灰度值;C为控制放大缩小的参数,即对比度系数;Dm为最大灰度值参数。
  x趋于中值的灰度值像素,有明显的变化;x趋于两端的灰度值的像素,变化比较微小。

2 代数(算数)操作

  特点: 两个(n个)图像,像素对像素的运算,生成第三(n+1)个图像。并且图像的大小要保持一致。可表示成:
【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第1张图片

2.1 加法操作

  (1)加法操作:①通过平均的方式来除噪声。能够去噪的原因是,自然界中的噪声都是Random存在的,做多张图像的平均可以实现噪声去除。例如通过高倍天文望远镜+摄像机,可以拍到夜空的星云,但是这些图像非常的不清晰,因为这些高倍放大的图像引入很多噪声,解决方法是在非常短的时间内,连续拍摄很多张图像,然后取这些图像的平均,就能得到清晰的图像。②多次曝光,同一图像中出现一个事物多次;③蓝屏摄影,在蓝屏下拍摄,将背景叠加在一起。
【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第2张图片
  API: cv.add(img1,img2)函数把两幅图像相加,或者可以通过numpy操作添加两个图像,如res=img1+img2.
  注意: OpenCV加法和numpy加法之间存在差异。OpenCV的加法操作是饱和操作,而numpy添加的是模运算。

import cv2
import matplotlib.pyplot as plt
import numpy as np
x=np.uint8([250])
y=np.uint8([10])
print(cv2.add(x,y))#250+10=260饱和操作变为255
print(x+y)#250+10=260取模操作变为4

  图像混合其实也是加法,但是不同的是两幅图像的权重不同,给人一种混合或者透明的感觉:
  g(x)=(1-α)f0(x)+aαf(x)
  API:cv2.addWeighted(img1,α,img2,β,γ)

import cv2
import matplotlib.pyplot as plt
import numpy as np

#1. 读取图像
img1=cv2.imread('rain.png')
img2=cv2.imread('view.png')

#2 图像混合
img=cv2.addWeighted(img1,0.3,img2,0.7,0)

# 3 显示图像

cv2.imshow('hunhe',img)
cv2.waitKey(0)

【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第3张图片

2.2 减法操作

  (2)减法操作:①通过减法操作去除背景。例如背景是一个固定的情况,前景是一个目标在运动,可以求取背景,通过减法操作抹去背景;②通过减法操作检测到目标运动;③求梯度,实际就是像素与像素之间减法操作操作。

2.3 乘法操作

  (3)乘法操作:通过算法已经能够求取最优二值化值,对图像进行二值化,得到感兴趣区域(二值图像),但是得到二值图像没有感兴趣区域的像素值信息,因此可以应用乘法操作,提取感兴趣区域的像素值信息。
【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第4张图片

2.4 除法操作

  (4)除法操作

3 几何操作

  目标: 改变图像空间坐标关系(平移、旋转…)。
  几何操作: 涉及空间转换(配准部分详细介绍)和灰度差值。

3.1 空间转换

3.1.1 平移变换

  (1)平移
在这里插入图片描述
  定义: 将图像按照指定方向和距离移动到相应的位置
  API: cv2.warpAffine(img,M,dsize)
  参数:
    img:输入图像
    M:2*3移动矩阵
      对于(x,y)处的像素点,要把
      它移动到(x+tx,y+ty)处时,矩阵M应该设置为: 在这里插入图片描述

      M为np.float32类型的Numpy数组。
    dsize:输出图像大小
  注意: 输出图像的大小,他应该是(宽度、高度)的形式。请记住,width=列数,height=行数

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('view.png')
#2. 图像移动
print(img.shape)#(271, 271, 3)
#平移矩阵
M=np.float32([[1,0,100],[0,1,50]])
img2=cv2.warpAffine(img,M,(271, 271))

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('wrapAffine',img2)
cv2.waitKey(0)

【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第5张图片

3.1.2 旋转变换

  (2)旋转
在这里插入图片描述
  定义: 图像旋转,是指图像按照某个位置转动一定角度的过程,旋转中图像仍保持这原始尺寸。图像旋转后图像的水平对称轴、垂直对称轴及中心坐标原点都可能会发生变换,因此需要对图像旋转中的坐标进行相应转换。
【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第6张图片
  API:
  M=cv2.getRotationMetrix2D(Center,angle,scale)
  cv2.warpAffine(img,M,dsize)

  参数:
    Center:旋转中心
    angle:旋转角度
    scale:缩放比例

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('view.png')

#2. 图像旋转
print(img.shape)#(271, 271, 3)
##2.1 旋转矩阵
M=cv2.getRotationMatrix2D((271/2,271/2),90,1)
##2.2 旋转,利用平移的API实现
img2=cv2.warpAffine(img,M,(271, 271))

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('rotion',img2)
cv2.waitKey(0)

【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第7张图片

3.1.3 缩放变换

  (3)缩放
在这里插入图片描述
  定义: 就是对图像的大小进行调整,即使图像放大或缩小
  API: cv2.resize(src,dsize,fx=0,fy=0,interpolation=cv2.INTER_LINEAR)
  参数:
    src:输入图像
    dsize:绝对尺寸,直接指定调整后图像的大小
    fx,fy:相对尺寸,将dsize设置为None,然后将fx,fy设置为比例因子。
  interpolation:差值方法

插值 含义
cv2.INTER_LINEAR 双线性差值
cv2.INTER_NEAREST 最近邻差值
cv2.INTER_AREA 像素区域重采样,默认
cv2.INTER_CUBIC 双三次插值
import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('view.png')
#2. 图像缩放
#  2.1 绝对尺寸
img1=cv2.resize(img,(250,250),interpolation=cv2.INTER_LINEAR)
#  2.2 相对尺寸
img2=cv2.resize(img,dsize=None,fx=0.8,fy=0.6)

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('juedui',img1)
cv2.imshow('xiangdui',img2)
cv2.waitKey(0)

【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第8张图片
  先放大再旋转和先旋转再放大的操作,得到的结果是相同的;先放大在平移和先平移在放大的操作,得到的结果是不一致的。

3.1.4 仿射变换

  定义: 图像仿射变换是深度学习预处理中常用的功能,仿射变换主要对图像的缩放、旋转、翻转和平移等操作的组合.
  API:
  M=cv2.getAffineTransform(pts1,pts2)
  cv2.warpAffine(img,M,dsize)

  参数:
    pts1:原图中的三个点
    pts1:变换后的三个点
  注意:仿射变换中,原图中所有不平先线在结果图像中同样平行。为了进行仿射变换,首先需要找到原图中三个点,以及仿射变换后的三个点,利用这两组点以及cv2.getAffineTransform()函数,求取2×3的仿射变换矩阵;之后仿射变换矩阵传入cv2.wrapAffine()函数,进行仿射变换。仿射变换的特点是,点线之间的关系在在原图中是一样的,但线的长度会发生变换、线与线之间的角度也会发生变化。

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('view.png')

#2. 图像仿射变换
print(img.shape)#(271, 271, 3)
##2.1 放射变换矩阵
pts1=np.float32([[50,50],[200,50],[50,200]])
pts2=np.float32([[100,100],[200,50],[50,200]])
M=cv2.getAffineTransform(pts1,pts2)
##2.2 仿射变换
img2=cv2.warpAffine(img,M,(271, 271))

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('fangshe',img2)
cv2.waitKey(0)

【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第9张图片

3.1.5透射变换

  定义: 透射变换是视角变换的结果,是指利用透视中心、像点、目标点三点共线的条件,按透视旋转定律使承影面(透视面)绕迹线(透射轴)旋转某一角度,破坏原有的投影光束线,仍能保持承影面上投影几何图像不变的变换。
【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第10张图片
【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第11张图片
  API:
  T=cv2.getPerspectiveTransform(pts1,pts2)
  cv2.warpPerspective(img,T,dsize)

  参数:
    pts1:原图中的四个点
    pts2:透射变换后的四个点
  注意:在OpenCV中,我们要找到四个点,其中任意三个不共线,然后通过四个点和cv2.getPerspectiveTransform()获取透射变换矩阵T,在利用T进行透射变换。

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像
img=cv2.imread('view.png')

#2. 图像透射变换
print(img.shape)#(271, 271, 3)
##2.1 透射变换矩阵
pts1=np.float32([[56,65],[268,42],[28,187],[189,190]])
pts2=np.float32([[100,145],[200,100],[80,190],[210,200]])
T=cv2.getPerspectiveTransform(pts1,pts2)
##2.2 透射变换
img2=cv2.warpPerspective(img,T,(271, 271))

#3.显示图像
cv2.imshow('origin',img)
cv2.imshow('toushe',img2)
cv2.waitKey(0)

【医学图像处理】5 图像间基本操作(点、算数、几何操作)_第12张图片

3.2 图像差值

  差值:
  (1)最近邻差值:就是用最邻近的点的灰度值的拷贝,但是这种方式不真实,容易产生梯田效应。
  (2)线性差值:在差值的点和周围的点之间形成一个正方形,正方形中根据距离设定权重,计算灰度值叠加作为差值点的灰度值。
  (3)双线性差值

你可能感兴趣的:(医学图像处理,图像处理,计算机视觉,opencv)