gpt4 book ai didi

java - 在 DICOM 中的 CT 图像上应用窗口级功能

转载 作者:行者123 更新时间:2023-12-01 12:37:03 29 4
gpt4 key购买 nike

我正在尝试在我的应用程序中为 DICOM 图像实现窗口级功能(在 CT 上应用骨骼、大脑、肺等),并根据 DICOM 规范实现公式。我正在根据以下公式更改像素值并创建新图像,但图像变得空白。做错了什么,这是正确的方法吗?请帮忙:(:( 谢谢

BufferedImage image = input image;

double w = 2500; // Window width
double c = 500; // window Center
double ymin = 0;
double ymax = 255;
double x = 0;
double y = 0;
double slope = dicomObject.get(Tag.RescaleSlope).getFloat(true);
double intercept = dicomObject.get(Tag.RescaleIntercept).getFloat(true);

int width = image.getWidth();
int height = image.getHeight();

double val = c - 0.5 - (w - 1) / 2;

double val2 = c - 0.5 + (w - 1) / 2;

for (int m = 0; m < height; m++) {

for (int n = 0; n < width; n++) {

int rgb = image.getRGB(n, m);

int valrgb = image.getRGB(n, m);
int a = (0xff000000 & valrgb) >>> 24;
int r = (0x00ff0000 & valrgb) >> 16;
int g = (0x0000ff00 & valrgb) >> 8;
int b = (0x000000ff & valrgb);

x = a + r + g + b;

if (x <= val)
y = ymin;

else if (x > val2)
y = ymax;

else {
y = ((x - (c - 0.5)) / (w - 1) + 0.5) * (ymax - ymin)+ ymin;
}
y = y * slope + intercept;
rgb = (int) y;
image.setRGB(n, m, rgb);

}
}
String filePath = "out put fileName";
ImageIO.write(image, "jpeg", new File(filePath));

最佳答案

首先,您的 BufferedImage 图像中有什么?您需要从原始(解压缩)像素数据中执行三个步骤:

  1. 获取存储的值 - 应用 BitsAllocation、BitsStored、HighBit 转换。 (我猜你的图像已经通过了这个级别)
  2. 获取模态值 - 这就是您的斜率、截距变换。在此转换之后,您的数据将采用 CT 的亨斯菲尔德单位。
  3. 然后应用 WW/WL(兴趣值)转换,这会将值窗口转换为灰度颜色空间。

编辑:

你必须告诉我你从哪里得到“输入图像”?解压缩后,像素数据应位于大小为 byte[width*height*2] 的字节数组中(对于 CT 图像分配的位始终为 16,因此 *2)。您可以像这样获取存储的值:

ushort code = (ushort)((pixel[0] + (pixel[1] << 8)) & (ushort)((1<<bitsStored) - 1));
int value = TwosComplementDecode(code);

关于java - 在 DICOM 中的 CT 图像上应用窗口级功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25486231/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com