图片霍夫变换拟合得到直线后,怎样获得直线上的像素点坐标?

  这是我今天在图像处理学习中遇到的问题,霍夫变换采用的概率霍夫变换,所以拟合得到的直线信息其实是直线的两个端点的坐标,这样一个比较直接的思路就是利用DDA算法来获取.

一.算法简介

  DDA算法是计算机图形学中最简单的绘制直线算法。其主要思想是由直线公式y = kx + b推导出来的。 
  我们已知直线段两个端点P0(x0,y0)和P1(x1,y1),就能求出 k 和 b 。

  在k,b均求出的条件下,只要知道一个x值,我们就能计算出一个y值。如果x的步进为1(x每次加1,即x = x +1),那么y的步进就为k+b;同样知道一个y值也能计算出x值,此时y的步进为1,x的步进为(1-b)/k。根据计算出的x值和y值,向下取整,得到坐标(x’,y’),并在(x’,y’)处绘制直线段上的一点。

  为进一步简化计算,通常可令b取0,将起点看作(0,0)。设当前点为(xi, yi)则用DDA算法求解(xi+1,yi+1)的计算公式可以概括为:

    xi+1 = xi + xStep (1)
    yi+1 = yi + yStep (2)
  我们一般通过计算 Δx 和 Δy 来确定xStep和yStep:

  如果 Δx > Δy,说明x轴的最大差值大于y轴的最大差值,x轴方向为步进的主方向,xStep = 1,yStep = k;
  如果 Δy > Δx,说明y轴的最大差值大于x轴的最大差值,y轴方向为步进的主方向,yStep = 1,xStep = 1 / k。
  根据这个公式,就能通过(xi,yi)迭代计算出(xi+1、yi+1),然后在坐标系中绘制计算出的(x,y)坐标点。

二.代码展示

  下面是代码,假设(x1, y1),(x2, y2)为直线的两个端点坐标:

xDis = x2 - x1  #x的增量
yDis = y2 - y1  #y的增量
if(abs(xDis) > abs(yDis)):maxstep = abs(xDis)
else:maxstep = abs(yDis)
xUnitstep = xDis/maxstep  #x每步骤增量
yUnitstep = yDis/maxstep  #y的每步增量
x = x1
y = y1
for k in range(maxstep):x = x + xUnitstepy = y + yUnitstepprint("x: %d, y:%d" % (x, y))

利用DDA算法得到直线上的像素点坐标相关推荐

  1. java 2d划线 刷子_Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS)...

    Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO2DGRAPHICS) (2007-04-05 23:37:39) Java 2D Graphics提供了强大的画线功能,可 ...

  2. 计算机图形学实习教程之基本图形的生成(直线DDA算法,直线中点算法,Bresenham画圆算法),利用C#实现,附源码

    环境:Win10+Visual Studio 2022 Community 在本次实验中需要用到上一篇文章实验内容的代码及环境,详情请见:传送门 目录 一.实验目的 二.实验过程 1.生成直线的DDA ...

  3. DDA算法画直线----计算机图形学

    生成直线的DDA算法: 假设待扫描转换的直线段为 Pb(xb, yb), Pe(xe, ye),如图所示: 令  , 斜率  , 则直线方程为  为方便起见,这里 假定  . 显然,对于每一个 xi  ...

  4. 检测两点所确定直线上的像素坐标

    图像上两个像素点可以确定一条直线,可如何通过直线方程把这些像素位置找出来呢?大家都会想到用直线方程来算,可是图像上像素位置的坐标都是整数值,通过y = k*x+b计算出来的y很可能是小数,即使将y做取 ...

  5. dda算法画直线_深度学习算法第一讲感知机数学原理解析及实现

    前言    从本篇开始我们将讲解一些机器学习中常用的算法模型及实现原理,本系列会一直更新,把自己走过的弯路都记录下来,也希望后人学习的过程能更顺畅一点. 正文 感知机的理解  感知机属于机器学习算法中 ...

  6. java 2d划线 刷子_月光软件站 - 编程文档 - Java - Java图形设计中,利用Bresenham算法实现直线线型,线宽的控制(NO 2D GRAPHICS)...

    Java 2D Graphics提供了强大的画线功能,可以控制线型,线宽,刷子的形状等,但在JDK1.2以前,没有提供这样一个功能,为了保持与旧版JDK的相容,实现一个可控制线型,线宽的画直线方法还是 ...

  7. 利用matlab求点到直线距离和垂足坐标(开源,易使用修改)

    利用matlab求点C到向量AB的垂直距离以及垂足E点坐标 A.B两点构成向量AB:C为任一点.求C点到向量AB的垂直距离与C点到AB的垂足坐标. 结果说明:C2ABJvLi--C点到向量AB的垂直距 ...

  8. 掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法。

    一.任务描述 根据下面要求,在右侧修改代码,绘制出预期输出的图片.平台会对你编写的代码进行测试. 1.本关任务 掌握一种基本图形元素光栅化算法,利用OpenGL实现直线光栅化的DDA算法. 2.预期输 ...

  9. matlab dda算法,dda直线算法生成.pdf

    dda直线算法生成 数学与计算科学学院 实 验 报 告 实验项目名称 线的生产 所属课程名称 计算机图形学 实 验 类 型 验证型 实 验 日 期 2015-4-13 班 级 信计 12-2 学 号 ...

最新文章

  1. POJ_1976 A Mini Locomotive (dp)
  2. android service alertdialog,Android service里面启动alertdialog
  3. Windows Server AppFabric Beta 2 for For Vistual Studio 2010已经发布
  4. [android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
  5. Visual Studio怎么使用中文帮助文档
  6. Servlet Session 跟踪
  7. python找到列表中最大和最小的数
  8. 第十届计算机大赛获奖作品,我校获第10届中国大学生计算机设计大赛一等奖
  9. 将两个字符串连接起来,不要用strcat函数
  10. Java——(九)IO流
  11. 传统蓝牙HCI搜索流程介绍(bluetooth inquiry)
  12. 2022华为机试真题 C++ 实现【统计射击比赛成绩】
  13. 邯郸云计算中心正式开通运营
  14. 工商银行总行营业厅管理软件设置视频教程
  15. MFC实现弹出模态对话框和非模态对话框(基于对话框)
  16. 现代希腊语字母表(待续)
  17. 用计算机术语写情书,大学各专业学霸情书火了,医学专业浪漫风趣,数学专业很难看懂...
  18. 传感器检测技术——传感器的动态特性
  19. 贪吃蛇大作战ai_二 贪吃蛇大作战!
  20. 震荡指标(一)RSI指标

热门文章

  1. 使用spring initializr ( 4.快速创建springboot工程 )(入门结束)
  2. JS中window.event事件使用详解
  3. sskeychain使用(轻量级框架)
  4. iptables-save和iptables-restore
  5. python绘制盖尔圆并做特征值的隔离
  6. usaco Electric Fence
  7. 三角测量计算三维坐标的代码_浅谈三维扫描仪的由来
  8. matlab pup,matlab利用bar函数画不同颜色直方图
  9. props写法_简单理解vue中Props属性
  10. 量子计算机科学原理,1000字看懂IBM量子计算机原理