图像边缘含有图像形状的丰富信息,然而,图像边缘有时所含的像素点还是太多,很多情况下需要继续精简(比如,使用 ShapeContext 进行形状匹配),于是就出现一个问题:如何从图像边缘上提取出N个点,使这N个点最具有代表性呢?一个很直观的思路是:

(1)这N个点要在图像边缘上;

(2)最近邻的两点之间要尽量分散开。

如,图像为:

对图像边缘进行随机均匀采样的算法实现( 转载)

 

需要设计一个采样算法,使它得到下面的结果:

对图像边缘进行随机均匀采样的算法实现( 转载)

 

==== 实现 ====

1,将图像加载,转换为ImageU8类(参见《发布我的高性能纯C#图像处理基本类,顺便也挑战一下极限。:)》),方便下一步处理。

2,获得全部边缘像素的位置。

在《重新认识C#: 玩转指针》的一文基础上新添加一个扩展方法:

1 public unsafe delegate void ActionOnPosition(Int32 x, Int32 y, TPixel* p);
2 public unsafe static void ForEach(this UnmanagedImage<TPixel> src, ActionOnPosition handler)
3 {
4     Int32 width = src.Width;
5     Int32 height = src.Height;
6 
7     TPixel* p = (TPixel*)src.StartIntPtr;
8     for (Int32 r = 0; r < height; r++)
9     {
10         for (Int32 w = 0; w < width; w++)
11         {
12             handler(w, r, p);
13             p++;
14         }
15     }
16 }

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-05
  • 2022-01-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-07-04
  • 2022-12-23
  • 2021-09-19
  • 2021-05-26
  • 2021-11-28
  • 2021-07-20
相关资源
相似解决方案