距离变换--扫描

本文介绍了图像处理中的距离变换技术,包括相关原理、扫描步骤和应用场景。距离变换将图像转换为反映像素到最近背景像素距离的图像,常用于水平集、快速斜切匹配等。文章还提供了示例代码展示计算过程。
摘要由CSDN通过智能技术生成

距离变换–扫描

一:相关原理

图像的距离变换实现了像素与图像区域的距离变换,使得最后生成的图像在该自己元素位置处的像素为0,临近的背景的像素具有较小的值,且随着距离的增大它的的数值也就越大。对于距离图像来说,图像中的每个像素的灰度值为该像素与距离其最近的背景像素间的距离,也就是说,给每个像素赋值为离它最近的背景像素点与其距离,一幅二值图像的距离变换可以提供每个像素到最近的非零像素的距离。
距离变换的一般步骤如下:
1.将输入图片转换为二值图像,前景设置为1,背景设置为0;
2.第一遍水平扫描从左上角开始,依次从左往右逐行扫描,扫描完一行自动跳转到下一行的最左端继续扫描,按行遍历图像。掩膜模板mask为maskL 使用下面的公式进行计算:

f(p)=min{f(p),D(p,q)+f(p)} q∈maskL;

其中D表示距离,包括欧氏距离,棋盘距离或是麦哈顿距离,f(p)为像素点p的像素值。
3.第二遍水平扫描从右下角开始,依次从右往左逐行扫描,扫描完一行自动转到上一行的最右端继续扫描,按行遍历图像,掩膜模板mask为maskR,方法和上一步相同
4.根据模板maskL和maskR的扫描结果得到最终的距离变换图像。


应用:

  1. 水平集
  2. 快速斜切匹配
  3. 图像拼接
  4. 图像混合的羽化
  5. 临近点配准

方法:

首先对图像进行二值化处理,然后给每个像素赋值为离它最近的背景像素点与其距离(Manhattan距离or欧氏距离),得到distance metric(距离矩阵),那么离边界越远的点越亮。
这里写图片描述


二:示例代码:

#include <iostream>    
#include <opencv2\core\core.hpp>    
#include <opencv2\highgui\highgui.hpp>    
#include <opencv2\imgproc\imgproc.hpp>    
using namespace cv;  

//计算欧式距离  
float calcEuclideanDistance(int x1, int y1, int x2, int y2)  
{  
    return sqrt(float((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2)));  
}  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值