距离变换

来源:互联网 发布:装饰仿真模拟软件 编辑:程序博客网 时间:2024/05/09 15:30
 

距离变换

分类: Computer Vision 1317人阅读 评论(3) 收藏 举报
distance图像处理算法

距离变换和线性滤波器,形态学变换处于平等位置,是图像处理的一种方法,通过使用两遍扫描光栅算法可以快速计算到曲线或点集的距离。


应用:

水平集

快速斜切匹配

图像拼接

图像混合的羽化

临近点配准


方法:

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



实现:

[cpp] view plaincopy
  1. Imgori=imread('test.jpg');  
  2. I=rgb2gray(Imgori);  
  3. subplot(2,3,1);imshow(I);title('origin');  
  4.   
  5. Threshold=100;  
  6. F=I>Threshold;%front  
  7. %B=I<=Threshold;%background  
  8. subplot(2,3,4);imshow(F,[]);title('binary');  
  9.   
  10. T=bwdist(F,'chessboard');  
  11. subplot(2,3,2);imshow(T,[]);title('chessboard distance transform')  
  12. %the chessboard distance between (x1,y1) and (x2,y2) is max(│x1 – x2│,│y1 – y2│).  
  13.   
  14. T=bwdist(F,'cityblock');  
  15. subplot(2,3,3);imshow(T,[]);title('chessboard distance transform')  
  16. %the cityblock distance between (x1,y1) and (x2,y2) is │x1 – x2│ + │y1 – y2│.  
  17.   
  18. T=bwdist(F,'euclidean');  
  19. subplot(2,3,5);imshow(T,[]);title('euclidean distance transform')  
  20. %use Euclidean distance  
  21.   
  22. T=bwdist(F,'quasi-euclidean');  
  23. subplot(2,3,6);imshow(T,[]);title('quasi-euclidean distance transform')  
  24. %use quasi-Euclidean distance  

或者单纯想看这几个距离函数的区别可以用以下code:

[cpp] view plaincopy
  1. bw = zeros(200,200); bw(50,50) = 1; bw(50,150) = 1;  
  2. bw(150,100) = 1;  
  3. D1 = bwdist(bw,'euclidean');  
  4. D2 = bwdist(bw,'cityblock');  
  5. D3 = bwdist(bw,'chessboard');  
  6. D4 = bwdist(bw,'quasi-euclidean');  
  7. figure  
  8. subplot(2,2,1), subimage(mat2gray(D1)), title('Euclidean')  
  9. hold on, imcontour(D1)  
  10. subplot(2,2,2), subimage(mat2gray(D2)), title('City block')  
  11. hold on, imcontour(D2)  
  12. subplot(2,2,3), subimage(mat2gray(D3)), title('Chessboard')  
  13. hold on, imcontour(D3)  
  14. subplot(2,2,4), subimage(mat2gray(D4)), title('Quasi-Euclidean')  
  15. hold on, imcontour(D4)  

原创粉丝点击