当前位置:   article > 正文

【计算机视觉基础】MATLAB程序实现图像中两个像素点的8-邻域、欧几里得距离与出租车距离、互换两像素点的罗森菲尔德8-邻域像素值_matlab求两像素点间距离

matlab求两像素点间距离

调用Matlab函数指令实现以下内容:

  1. 提取图像上某两点(x1,y1)、(x2,y2)的8-邻域罗森菲尔德邻域并显示;
  2. 显示(x1,y1)与(x2,y2)两点间的图像像素变化情况;

  3. 比较并显示RGB图像空间内(x1,y1)点处与HSV图像空间内(x1,y1)点处的值的不同;
  4. 比较并显示(x1,y1)与(x2,y2)两点间的欧几里得距离与出租车距离;
  5. 互换(x1,y1)与(x2,y2)两点处的8-邻域罗森菲尔德邻域像素值并显示互换像素后的图像;
  6. 将修改像素值的图像以至少两种常见图像格式保存至本地。 

话不多数,上代码!程序代码如下:

  1. % 读取图像
  2. I=imread('onion.png');
  3. Ig=rgb2gray(I);
  4. figure(1)
  5. subplot(1,2,1);imshow(I),title('RGB')
  6. subplot(1,2,2);imshow(Ig),title('Gray')
  7. hsv=rgb2hsv(I);
  8. wrgb=ind2rgb(gray2ind(Ig,255),jet(255));
  9. figure(2)
  10. subplot(1,2,1),imshow(wrgb),title('F-RGB')
  11. subplot(1,2,2),imshow(hsv),title('HSV')
  12. figure(3)
  13. im=imcrop(I,[40,80,70,70]);
  14. image(im),axis on,colormap(gray(256)),title('截取的一小块图像');
  15. % 两个像素点8-邻域的计算
  16. row1=4;
  17. col1=5;
  18. im(row1,col1,:)=255;
  19. im(row1-1,col1-1:col1+1,:)=155;
  20. im(row1,col1-1,:)=155;
  21. im(row1,col1+1,:)=155;
  22. im(row1+1,col1-1:col1+1,:)=155;
  23. row2=16;
  24. col2=18;
  25. im(row2,col2,:)=255;
  26. im(row2-1,col2-1:col2+1,:)=155;
  27. im(row2,col2-1,:)=155;
  28. im(row2,col2+1,:)=155;
  29. im(row2+1,col2-1:col2+1,:)=155;
  30. figure(4)
  31. image(im),axis on,grid on,colormap(gray(256)),title('两点的8-领域');
  32. % 两个像素点之间RGB三个像素值的变化
  33. a=80+row1;
  34. b=40+col1;
  35. a1=80+row2;
  36. b1=40+col2;
  37. figure(5),
  38. improfile(I,[b,b1],[a,a1]),
  39. ylabel('Pixel value'),
  40. title('(x1,y1)到(x2,y2)的像素值变化情况')
  41. % 两个像素点之间的距离
  42. H1=I(a,b);
  43. H2=hsv(a,b);
  44. disp('RGB图像(x1,y1)处的值为:')
  45. disp(H1)
  46. disp('HSV图像(x1,y1)处的值为:')
  47. disp(H2)
  48. figure(6)
  49. subplot(1,2,1),imshow(H1),title('RGB上的(x1,y1)')
  50. subplot(1,2,2),imshow(H2),title('HSV上的(x1,y1)')
  51. EuD=sqrt((b-b1)^2+(a-a1)^2);
  52. disp('两点间的欧几里得距离为:')
  53. disp(EuD)
  54. MaD=abs(b-b1)+abs(a-a1);
  55. disp('两点间的出租车距离为:')
  56. disp(MaD)
  57. % 互换两个像素点的8-邻域像素值
  58. I2=I;
  59. p1=I2(a,b,:);
  60. p2=I2(a-1,b-1:b+1,:);
  61. p3=I2(a,b-1,:);
  62. p4=I2(a,b+1,:);
  63. p5=I2(a+1,b-1:b+1,:);
  64. I2(a,b,:)=I2(a1,b1,:);
  65. I2(a-1,b-1:b+1,:)=I2(a1-1,b1-1:b1+1,:);
  66. I2(a,b-1,:)=I2(a1,b1-1,:);
  67. I2(a,b+1,:)=I2(a1,b1+1,:);
  68. I2(a+1,b-1:b+1,:)=I2(a1+1,b1-1:b1+1,:);
  69. I2(a1,b1,:)=p1;
  70. I2(a1-1,b1-1:b1+1,:)=p2;
  71. I2(a1,b1-1,:)=p3;
  72. I2(a1,b1+1,:)=p4;
  73. I2(a1+1,b1-1:b1+1,:)=p5;
  74. figure(7)
  75. subplot(1,2,1),imshow(I),line([b,b1],[a,a1]),title('(x1,y1)与(x2,y2)相连');
  76. subplot(1,2,2),imshow(I2),title('交换(x1,y1)和(x2,y2)8-领域像素值');
  77. % 保存图像
  78. imwrite(I2,'onion.jpg')
  79. imwrite(I2,'onion.bmp')
  80. imwrite(I2,'onion.jpeg')

程序代码原理:

  1. 使用函数imread从磁盘中读取RGB图像onion.png,然后使用函数rgb2gray将RGB图像转为灰度图像;
  2. 使用函数rgb2hsv处理RGB图像获得HSV图像,先使用函数gray2ind将灰度图像转换为索引图像,然后使用函数ind2rgb处理索引图像获得伪彩色图像,最后使用函数subplot将图像窗口分块,然后使用函数imshow在图像窗口中分别显示灰度、彩色、伪彩色和HSV图像;
  3. 使用函数imcrop截取图像中指定区域的一小块图像,然后在这一小块图像中选取两个像素点,通过罗森菲尔德邻域计算方法,对这两个像素点的8-邻域分别进行赋值以显示各像素点的8-邻域,然后通过函数image将修改过两点8-邻域像素值后的小块图像在图像窗口显示;
  4. 通过计算推导可以得出小块图像中的像素点(row,col)在原本RGB图像中的坐标为(y+row,x+col),x,y为截取小块图像时指定区域的左上角的坐标值,使用上述计算方法得出的两点的坐标,利用函数imprifile获得从(x1,y1)与(x2,y2)两点间的图像像素变化情况并在图像窗口显示;
  5. 利用步骤4中获得的像素点(x1,y1)的坐标,直接获取该坐标处的像素点在RGB图像中和HSV图像中的像素值,直接使用函数imshow显示在这两种图像中此处的像素点;
  6. 根据步骤4中(x1,y1)与(x2,y2)的坐标,利用欧几里得距离和出租车距离的计算公式计算出两点间的欧几里得距离和出租车距离;
  7. 先将(x1,y1)在RGB图像中的8-邻域的像素值根据罗森菲尔德邻域公式保存在一组自定义的变量中,然后将(x2,y2)在RGB图像中的8-邻域的像素值根据罗森菲尔德公式赋予(x1,y1)的8-邻域,然后将自定义的变量中的原来(x1,y1)在RGB图像中8-邻域像素值赋予(x2,y2)的8-邻域,这样便实现了互换(x1,y1)与(x2,y2)两点处的8-邻域罗森菲尔德邻域像素值,然后使用函数imshow在图像窗口显示互换(x1,y1)与(x2,y2)两点处的8-邻域罗森菲尔德邻域像素值后的图像;
  8. 直接使用函数imwrite将图像onion.png分别以.jpg、.bmp、.jpeg格式保存在本地文件中。

 程序运行结果如下:

(这里只放了内容3、4、5、6的,其他内容请看专栏中的前一篇文章)

3、两个像素点的值

 

4、两个像素点之间的距离 

 

5、交换两个像素点的8-邻域的像素值:

 

6、保存图像:

 

 

感谢观看,喜欢博主的分享朋友,别忘了一键三连哦!

原创内容,不经允许禁止转载

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/422996
推荐阅读
相关标签
  

闽ICP备14008679号