使用C将图像分割成多个子图像

时间:2013-02-12 14:13:03

标签: image image-processing satellite-image

我正在寻找一个给出大小为x的图像的C库,它会将图像分割成多个图像,这样我就可以将每个子图像发送到一个专用的CPU,以便使用区域增长或其他任何方式检测其上的段。

4 个答案:

答案 0 :(得分:4)

你真的想分割图像吗?

  1. 如果您使用的是多核CPU,最好加载一次图像,然后在其上运行处理线程(我假设,处理只读取图像),包含x,y,width,height参数。

  2. 如果您有更多主机,则有一个调度程序,它正在对映像执行多项操作:解压缩,拆分,压缩部件,传输部件。我认为,处理主机位于同一本地网络上。如果您可以将图像作为广播发送到本地网络,我的意思是所有主机立即接收图像,这将是性能提升:显示器不能拆分和重新发送部件处理任务应该只选择接收到的整个图像的适当部分(x,y,宽度,高度)。我不知道你使用的图像格式是什么,但我很确定你不必解压缩整个图像,至少在垂直方向你应该跳过不需要的区域。 (您应该将图像拆分为全宽区域,以避免解压缩不需要的区域。)

答案 1 :(得分:1)

合并单独分段输出的结果将是困难的部分。如果你碰巧在一个片段中分开怎么办?你会从每个分割图像中得到一个片段,你必须将它们合并在一起。会有不确定的情况,因此您必须选择一个指标来决定何时合并两个区域。

如果这是一个问题,您可能需要尝试使用Seam Carving算法来生成不太可能与区域边缘相交的分割。 Photoshop的Content-Aware Resize工具使用接缝雕刻在图像中查找视觉上不重要的水平和垂直路径。

答案 2 :(得分:1)

正如japresis指出的那样,合并分割结果可能是您最难的部分。 如果您使用基于图形切割的图像分割算法,则可以使用this approach扩充代码,该代码为执行并行操作提供了一种原则性方法,并以最佳方式将它们组合在一起。

答案 3 :(得分:1)

虽然同意Shai和japreiss,并认为由于你的目标是图像分割,你会有边界问题(因为你需要邻域信息),对于图像处理部分,我建议像

libpng:http://www.libpng.org/pub/png/libpng.html

看看这些StackOverflow问题:

  1. How to encode PNG to buffer using libpng?
  2. Using libpng to "split" an image into segments(这还没有得到妥善回答)
  3. 当您的缓冲区填充图像值时,读取和写入部分图像应该不会很棘手。