图像变换

图像变换有什么用?

图像变换意义:

  1. 图像的特征更为突出
  2. 原来无法直接观测的特征直接显现出来
  3. 需要提取图像中的特征,便于后续处理及图像理解

常见图像变换:

  • 几何变换:图像放缩、图像平移、图像旋转、图像镜像、图像翻转。
  • 距离变换:通常作用于二值图像上,描述的是该像素点到最近的区域边界的距离。如果假设背景为黑(对应值为0),则为到最近值0的距离。
    [00000000011111100111111001111110011111100111111000000000][00000000011111100122221001233210012222100111111000000000]\begin{bmatrix} 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix} \begin{bmatrix} 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 1 & 2 & 2 & 2 & 2 & 1 & 0 \\ 0 & 1 & 2 & 3 & 3 & 2 & 1 & 0 \\ 0 & 1 & 2 & 2 & 2 & 2 & 1 & 0 \\ 0 & 1 & 1 & 1 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{bmatrix} 0000000011111001111100111110011111001111100111110000000000000000111110012221001232100123210012221001111100000000
    距离变换可以将联通的区域分开,比如数硬币。
  • 对数极坐标变换(Log-Polar变换)
    将图像像素坐标转换为极坐标,然后对距离取对数:
    变换公式:
    {r=x2+y2,ρ=log(r);θ=arctanyx\left\{ r = \sqrt{x^2 + y^2}, \rho = log(r); \\ \theta = arctan\frac{y}{x} \right. {r=x2+y2,ρ=log(r);θ=arctanxy
    反变换公式:
    {x=rcos(θ);y=rsin(θ)\left\{ x = rcos(\theta); \\ y = rsin(\theta) \right. {x=rcos(θ);y=rsin(θ)
    Log-Polar变换应用:全景展开
    总结:
  • 图像几何变换包括放缩、旋转、镜像等
  • 距离变换具有类似“细化”的效果
  • Log-Polar变换将直角坐标变换到极坐标,可用于全景展开等应用

灰度直方图

目标:

  • 掌握直方图的基本概念
  • 掌握从直方图判断图像质量的方式
  • 掌握直方图均衡的基本思想
    灰度越集中,对比度越低;灰度平均,对比度高,但噪声也多。

直方图均衡化

  • 直方图均衡化的作用就是图像增强
    需要满足的条件:亮的依然亮,暗的依然暗。
  • 直方图映射方法:
    sk=∑j=0knjn,k=0,1,2,⋅⋅⋅,L−1s_k = \sum_{j=0}^{k}{\frac{n_j}{n}},k = 0,1,2,···,L-1 sk=j=0knnj,k=0,1,2,,L1
    n为总像素个数,L表示所有像素值的种类数,表示新的灰度值所对应的概率,等于之前所有灰度值概率的累加。
    示例:
25512820050
5020025550
255200128128
20020025550

灰度值像素个数概率累计概率根据函数映射后的灰度值取整
5040.250.250.25*(255-0) = 63.7564
12830.18750.4375111.5625112
20050.31250.75191.25191
25540.251255255

25511219164
6419125564
255191112112
19119125564

全局直方图均衡化会增加噪声。

局部直方图均衡化

在每一个小邻域内使用直方图均衡化;
利用局部直方图统计进行灰度增强

  1. 在图像的每个小邻域内,计算局部直方图,进而计算灰度和方差;
  2. 根据需求,对图像的亮部或暗部进行增强。如对暗部增强方式如下:
  3. 计算局部均值mlm_lml与全局均值mmm,如ml≤k0mm_l \leq k_0mmlk0m,则认为该点是候选点;
  4. 进一步计算局部方差σl\sigma_lσl与全局方差σ\sigmaσ,如σl≤k2σ\sigma_l\leq k_2\sigmaσlk2σ,且k1σ≤σl,k1<k2k_1\sigma\leq\sigma_l,k_1<k_2k1σσlk1<k2(对标准差为0的区域不增强),则满足增强条件;
  5. 对同时满足1,2条件的点进行增强:
    g(x,y)=E⋅f(x,y)g(x,y) = E \cdot f(x,y) g(x,y)=Ef(x,y)
    需要指定k0,k1,k2k_0,k_1,k_2k0,k1,k2

总结:

  1. 直方图是对图像中的像素灰度进行统计;
  2. 通过直方图可判断图像曝光及对比度等情况;
  3. 直方图均衡可增强图像对比度;
  4. 适当使用局部直方图均衡可有效改善图像暗部质量

霍夫变换

目标:

  1. 掌握参数空间及霍夫(Hough)变换的基本原理
  2. 了解Hough变换的基本步骤

Hough变换

  1. 问题:给定图像中的n个点,希望找到这些点中的多个子集,每个子集对应一条直线。
  2. 难点:我们不知道图像中哪些点对应一条直线
  3. 暴力搜索:首先得到n(n−1)2\frac{n(n-1)}{2}2n(n1)条直线,进一步对所有附近的点进行比较,判断是否属于直线。因此需要执行n(n−1)2\frac{n(n-1)}{2}2n(n1)次比较,计算量太大!
  4. 此外,判断点是否属于直线需要借助阈值,该值难以设置。
  5. Hough于1962年提出Hough变换,很好的解决了计算速度和鲁棒性的问题
  6. 核心思想:将原坐标(x,y)转换到参数空间中表示,进一步利用投票机制解决鲁棒性问题
  7. 直线方程表达:
  8. 斜距/截距:y=kx+by = kx +by=kx+b,每一条直线对应一个k,bk,bk,b
  9. 法线式:xcosθ+ysinθ=ρxcos\theta + ysin\theta = \rhoxcosθ+ysinθ=ρ,每一条直线对应一个ρ,θ\rho,\thetaρ,θ
  10. 直角坐标系的一点(x0,y0x_0,y_0x0,y0),对应参数空间(θ,ρ\theta,\rhoθ,ρ)中的一条近似正弦曲线:
    x0cosθ+y0sinθ=ρ⇒ρ=xo2+yo2cos(θ+ϕ)x_0cos\theta + y_0sin\theta = \rho \Rightarrow \rho = \sqrt{{x_o}^2+{y_o}^2}cos(\theta + \phi) x0cosθ+y0sinθ=ρρ=xo2+yo2cos(θ+ϕ)
  11. 同一条直线上的多个点,在(θ,ρ)(\theta,\rho)(θ,ρ)空间中必相交于一点,但(θ,ρ)(\theta,\rho)(θ,ρ)空间中的曲线是非线性的,直接寻找交汇于一点的曲线计算量大,因此将(θ,ρ)(\theta,\rho)(θ,ρ)空间划分网格,寻找包含曲线数目多的网格点。

Hough变换步骤

  1. (θ,ρ)(\theta,\rho)(θ,ρ)空间量化为许多小格
  2. 根据x−yx-yxy平面每一个点代入θ\thetaθ的量化值。算出各个ρ\rhoρ
  3. 将对应格内通过ρ−θ\rho-\thetaρθ曲线的数目计数累加
  4. 当全部点变换后,对小格进行检验(投票机制)。设置累计阈值TTT,计数器大于TTT的小格对应于共线点,其可以用作直线拟合参数。小于TTT的反映非共线点,丢弃不用。
    应用:寻找飞机跑道,对原视图像进行边缘检测,提取边缘点,寻找共线的点即飞机跑道。

总结:

  1. 霍夫变换基于直线法线表示及对应的参数空间(θ,ρ)(\theta,\rho)(θ,ρ);
  2. 最终直线参数确定采用投票机制(即避免了复杂的方程求解,又对噪声具有一定鲁棒性),统计参数空间小格中的曲线数目。

图像变换实战演练

目标

  1. 使用OpenCV实现基本图像几何变换
  2. 使用OpenCV实现距离变换和Log-Polar变换
  3. 使用OpenCV实现直方图计算与直方图均衡
  4. 使用OpenCV实现Hough变换

相关函数

  1. 距离变换
dst = cv2.distanceTransform(src, distanceType, maskSize[, dst[, dstType]])
#distanceType:距离计算方式,DIST_L1,DIST_L2或DIST_C;
#maskSize:掩模尺寸,可取DIST_MASK_PRECISE或DIST_MASK_3,5等。
  1. Log-Polar变换
dst = cv2.logPolar(src, center, M, flags[, dst])
#center:变换中心点
#M:幅值尺度参数
#flags:标志。是插值方法和下面选项的组合:CV_WARP_FILL_OUTLIERS填充目标图像中的所有像素;CV_WARP_INVERSE_MAP表示矩阵是从目标图像到源图像的反变换
  1. 计算直方图
matplotlib.pyplot.hist(x, bins=None, range=None,...)
#bins:多少个柱;
#range:显示的范围
  1. 直方图均衡化
dst = cv2.equalizeHist(src[, dst])
  1. 标准Hough变换
lines = cv.HoughLines(image, rho, theta, threshold[, lines[, srn[, stn[, min_theta[, max_theta]]]]])
#image:输入图像,应为二值图像,通常使用边缘检测结果
#rho:线段以像素为单位的距离精度,double类型的,推荐用1.0
#theta:线段以弧度为单位的角度精度,推荐用numpy.pi/180
#threshold:累加平面的阈值参数,int类型,超过设定阈值才被检测出线段,值越大,基本意味着检出的线段越长,检出的线段个数越少。
  1. 累计概率Hough变换
lines = cv2.HoughLinesP(image, rho, theta, threshold[, lines[, minLineLength[, maxLineGap]]])

实战演练

程序功能:

  1. 实现基本图像几何变换:放缩、翻转
  2. 实现距离变换和Log-Polar变换
  3. 实现直方图计算与直方图均衡
  4. 实现Hough变换
  5. 以上如果显示
import cv2
import matplotlib.pyplot as plt
import numpy as npimg = cv2.imread('C:/python/img/lena.jpg')
cv2.imshow("Source", img)#实现图像改变大小和翻转
w, h = img.shape[0:2]
resized = cv2.resize(img, (int(w/4), int(h/2)))
flipped = cv2.flip(img, -1)
cv2.imshow("Resized", resized)
cv2.imshow("Flipped", flipped)#实现图像的距离变换
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thr = cv2.threshold(gray, 100, 255, cv2.THRESH_OTSU)
dist = cv2.distanceTransform(thr, cv2.DIST_L2, cv2.DIST_MASK_3) #3*3的掩模
dist_norm = cv2.convertScaleAbs(dist)
cv2.imshow("Distance transform", dist_norm)#实现Log-polar变换
center = (w/2, h/2)
maxRadius = 0.7*min(center)
M = w/cv2.log(maxRadius)
print(maxRadius, M[0])
log_polar = cv2.logPolar(img, center, M[0]*0.8, cv2.INTER_LINEAR + cv2.WARP_FILL_OUTLIERS)
cv2.imshow("Log-polar", log_polar)#实现灰度直方图和直方图均衡化
plt.hist(gray.ravel(), 255, [0,256])
plt.show()
equa = cv2.equalizeHist(gray)
cv2.imshow("Equalized image", equa)#实现Hough变换
edges = cv2.Canny(thr, 50, 150)
disp_edge = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR)
lines = cv2.HoughLinesP(edges, 1, 1*np.pi/180, 10)
for line in lines:for x1, y1, x2, y2 in line:#画出直线cv2.line(disp_edge, (x1,y1), (x2,y2), (0, 255, 0), 1)passprint("Line count:", len(lines))
cv2.imshow("edges",edges)
cv2.imshow("Hough lines", disp_edge)cv2.waitKey()
cv2.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492511.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVa 1225 Digit Counting

题意&#xff1a;给出n,将前n个整数顺次写在一起&#xff0c;统计各个数字出现的次数。 用的最笨的办法--直接统计-- 后来发现网上的题解有先打表来做的 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 us…

人工智能产业发展联盟公布首轮AI芯片基准评测结果,评估工具已开源

来源&#xff1a;量子位3月6日&#xff0c;由国际电信联盟、中国信息通信研究院联合主办&#xff0c;人工智能产业发展联盟&#xff08;AIIA&#xff09;和中兴通讯承办的国际论坛“AI in 5G——引领新时代论坛”在深圳召开。来自全球电信运营商、标准组织、互联网企业、设备厂…

软件工程概论第七章

面向对象分析 分析的概念主要有分析类&#xff0c;和分析活动其中分析类中的主要有实体类&#xff0c;边界类&#xff0c;和控制类。知道了分析类主要类型&#xff0c;怎样识别分析类&#xff0c;边界类通常 一个参与者和一个用例之间的交互或通信关联对应一个边界类。控制类负…

图像分割I

为什么要图像分割&#xff1f; 目标 掌握图像分割的基本概念了解图像分割方法分类 目标&#xff1a;将图像划分为不同区域定义&#xff1a;令集合R代表整个图像区域&#xff0c;对R的图像分割可以看作是将R分成N个满足以下条件的非空子集R1,R2,...,RNR_1,R_2,...,R_NR1​,R2​…

MVC中Model BLL层Model模型互转

MVC中Model BLL层Model模型互转 一. 模型通常可以做2种&#xff1a;充血模型和失血模型&#xff0c;一般做法是模型就是模型&#xff0c;不具备方法来操作&#xff0c;只具有属性&#xff0c;这种叫做失血模型(可能不准确)&#xff1b;具备对模型一定的简单操作方法&#xff0c…

OutputCache祥解

当用户訪问页面时&#xff0c;整个页面将会被server保存在内存中&#xff0c;这样就对页面进行了缓存。当用户再次訪问该页&#xff0c;页面不会再次运行数据操作&#xff0c;页面首先会检查server中是否存在缓存&#xff0c;假设缓存存在&#xff0c;则直接从缓存中获取页面信…

图像分割II

区域增长算法 目标 掌握区域生长法的基本思想掌握图像分裂合并分割的基本思想及步骤 区域生长法分割 大津算法的局限性&#xff1a;噪声比较严重的图片、分割目标颜色渐变的情况&#xff0c;分割效果差。 区域生长&#xff1a;从种子点开始&#xff0c;按照一定准则&#x…

205页PPT,看5G+AI引领的下一个时代!

来源&#xff1a;国泰君安证券、暴点摘要&#xff1a;为大家分享一份国泰君安证券关于“电子行业2019年春季投资策略&#xff0c;5GAI系列研究”报告&#xff0c;详看哪些产业将迎来黄金期。预计5G换机高峰期将出现在2020~2023年&#xff0c;届时手机出货量将恢复增长。同时&am…

【转载】Java中各种修饰符与访问修饰符的说明

转&#xff1a;http://handbook.blog.163.com/blog/static/837295522010889212296/ 类&#xff1a; 访问修饰符 修饰符 class 类名称 extends 父类名称 implement 接口名称 &#xff08;访问修饰符与修饰符的位置可以互换&#xff09;访问修饰符名称说明备注public可以被所有…

图像表示与描述

图像表示与描述 目标 掌握常见的基于轮廓特征的描述掌握常见的图像区域特征描述 对目标特征的测量是要利用分割结果进一步从图像中获取有用信息&#xff0c;为达到这个目的需要解决两个关键问题&#xff1a; 选用什么特征来描述目标(定性)如何精确测量这些特征(定量) 常见…

RISV-V未来将面临怎样的挑战?

来源&#xff1a;MoneyDJ、半导体行业观察继大陆的RISC-V联盟成立之后&#xff0c;台湾RISC-V联盟也在今年正式成立&#xff0c;这也让RISC-V的议题热度逐渐加温&#xff0c;事实上这也是许多人看好能够足以与ARM竞争的架构&#xff0c;加上目前许多国际大厂陆续采用RISC-V架构…

使用matlab程序,基于标准卡标定感压纸的压力分布

任务说明 使用富士感压纸(压力测试纸)测量压力&#xff0c;感压纸受压时会显现颜色&#xff0c;根据峰值应力呈现不同的颜色深度。感压制提供了标准比色卡&#xff0c;给出不同颜色深度对应的压力值。 要求使用matlab&#xff0c;对照标准比色卡&#xff0c;对实验中使用的比…

斯坦福大学陈丹琦等人解读机器阅读最新进展:超越局部模式匹配

来源&#xff1a;AI 科技评论不久前&#xff0c;斯坦福大学的计算机科学博士陈丹琦的一篇长达 156 页的毕业论文《Neural Reading Comprehension and Beyond》成为「爆款文章」&#xff0c;一时引起了不小轰动。而本文是她与同样师从 Christopher Manning 的同学 Peng Qi 一起发…

Cache技术―OSCache

Cache技术―OSCache 版权声明&#xff1a;转载时请以超链接形式标明文章原始出处和作者信息及本声明http://aumy2008.blogbus.com/logs/36462938.html一、简介 Cache是一种用于提高系统响应速度、改善系统运行性能的技术。尤其是在Web应用中&#xff0c;通过缓存页面的输出结…

智能网联产业链深度报告

来源&#xff1a;智车科技未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#…

opencv画图_c++

认识画图函数 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc.hpp> //#include<iostream>#define w 400using namespace cv;/* 大量使用 Point 和 Scalar 这两个结构&#xff1a; Point数据结构…

3月任务--target

2014过去了&#xff0c; 在再过4周左右&#xff0c; 就是在WACAI呆了一周年了。 经过这一年&#xff0c;我想我的成长是有的&#xff0c; 尤其是经过“话费账单”这个项目&#xff0c; 不过有喜有忧&#xff0c; 也许就和他们说的一样&#xff0c; 是我不容易满足吧。 都说知足…

史上最全的物理学科普(值得收藏)

来源&#xff1a;中科院物理所&#xff08;ID&#xff1a;cas-iop&#xff09;本文素材主要摘录自加来道雄的《Hypersapce》和丘成桐的《The Shape of Inner Space》。作者希望凭籍本文&#xff0c;回顾一下两百年来的科学史&#xff0c;看看那些代表着人类最高心智的数学家、物…

c++入门1

工具 NotepadVS 2015开发人员命令提示符 特点轻量化&#xff0c;Notepad可以写源代码&#xff0c;在VS 2015开发人员命令提示符可以进行编译、运行。 cd xxxxxx //进入源文件所在目录 cl xxx.cpp //在VS 2015开发人员命令提示符中编译源代码 xxx.exe //运行编译后的可执行文…

Redis数据存储解决方案

http://www.tuicool.com/articles/77nUZn 1、背景 1.1 Redis简介 官方网站&#xff1a; http://redis.io/ &#xff0c;Redis是REmote DIctionary Server的缩写。 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并…