1

癌症 CT 图片存储在无符号短数组(一维)中。

我有图片内癌症区域的位置信息,但坐标(x,y)是超像素(128x128 unsigned short)。我的任务是突出这个区域。

我已经通过将超像素坐标转换为可用于无符号短数组的偏移量来解决这个问题。它工作正常,但我想知道是否有更聪明的方法来解决这个问题,因为我的解决方案需要 3 个嵌套的 for 循环。

是否可以“超像素”访问 ushort 数组,所以我可以在超像素中导航 ushort 数组。

我知道这行不通。为了让你知道我在想什么:

typedef struct 
{
   unsigned short[128x128]
} 
spix;

spix *spixptr;

unsigned short * bufptr = img->getBuf();

spixptr = bufptr;

更新1:

是的,它含糊不清,让我再试一次:

[0][1][2] ... [127]| ... [x] |
[1]                |         |
[2]                |         |
.                  |         |
.                  | <-- this is a superpixel
.                  |         |
[127]              |         |
--------------------         |
.                            |
.                            |
.                            |
[y]                          |<--whole picture stored in a ushort* buf = new ushort[x*y]
------------------------------

ushorts我喜欢使用指针一次访问 128x128 ,因此我可以将memcpy数据放入 128x128 字段。

更新 2:

bitblit 传输提示有很大帮助。

4

2 回答 2

1

这很难回答,因为它相当模糊。

如果您的意思是“给定图像的这种定义,我如何访问 (x,y) 处的像素”,那么答案应该不会很令人惊讶:

typedef struct
{
    unsigned short data[128 * 128]; // This was broken in the question.
} spix;


void spix_set_pixel(spix *s, unsigned int x, unsigned int y, unsigned short value)
{
  s->data[y * 128 + x] = value;
}

完全不确定这是否回答了您的问题,但听起来……至少是合理的。

于 2008-11-24T14:05:20.207 回答
0

据我了解,你有:

  • CT 扫描的大图像
  • 该图像中的矩形区域是癌症

然后就有点难以理解了。我相信您想要创建某种类,以便您可以有效地访问 128x128 图像块,就好像它们是单个像素一样。

因此,如果图像是 1024x1024 像素,您希望能够以 128x128 像素块的 8x8 网格的形式访问它。现在,如果是这种情况,您需要创建一个代表这些 128x128 块之一的类。这个类应该引用图像,这样您就不会复制图像数据,并且应该包含您想要对那个“超像素”执行的所有操作。

但是,如果您只想从较大的图像中提取特定的 128x128 块,那么您需要的是位 blit算法。位块传输(通常称为 blit)将允许您将选定的数据位从较大的图像复制到较小的图像。该算法还可以适用于对较大图像中的特定区域执行几乎任何您想要的操作。

如果你只需要一个 blit,那么每个相对现代的图形 API 都应该有 blit 函数。

于 2008-11-24T14:51:18.897 回答