读取图像的像素值
Reading pixel values of an image
我正在尝试使用草根DICOM (GDCM)库在我的简单c++应用程序中读取DICOM文件中包含的图像的像素值。当读取文件元数据时,我得到关于图片的以下信息:
Bits allocated: 16
Bits Stored: 16
High Bit: 15
Unsigned or signed: 1
Samples pr pixel: 1
Dimensions: 2
Dimension values: 256x256
Pixel Representation: 1
SamplesPerPixel: 1
ScalarType: INT16
PhotometricInterpretation: MONOCHROME2
Pixel buffer length: 131072
假设图像的分辨率为256x256,并且是MONOCHROME2类型,我预计像素缓冲区长度为256x256=65536个元素,但实际上是131072个元素。
如果我使用MATLAB来导入像素数据,我会得到0 - 850范围内的65536个值,其中0为黑色,850为白色。
当我查看像素缓冲区时,我从c++应用程序中的GDCM读数中获得像素缓冲区,pixelbuffer是131072个元素,其中每个偶数索引元素在-128到+127范围内,每个奇数索引元素在0-3范围内。这样的:
Exerpt:
PixelBuffer[120] = -35
PixelBuffer[121] = 0
PixelBuffer[122] = 51
PixelBuffer[123] = 2
PixelBuffer[124] = 71
PixelBuffer[125] = 2
PixelBuffer[126] = 9
PixelBuffer[127] = 2
PixelBuffer[128] = -80
PixelBuffer[129] = 2
PixelBuffer[130] = 87
PixelBuffer[131] = 3
PixelBuffer[132] = 121
PixelBuffer[133] = 3
PixelBuffer[134] = -27
PixelBuffer[135] = 2
PixelBuffer[136] = 27
PixelBuffer[137] = 2
PixelBuffer[138] = -111
PixelBuffer[139] = 1
PixelBuffer[140] = 75
PixelBuffer[141] = 1
PixelBuffer[142] = 103
这些值的排列是什么意思?这是单色图像的某种典型像素表示吗?我一直在"谷歌图像像素结构"和类似,但找不到我要找的东西。是否有一些可用的资源可以帮助我理解这种值的排列以及它们如何与每个像素相关?
我使用此代码读取16位MONOCHROME2 Dicom文件:
byte[] signedData = new byte[2];
List<int> tempInt = new List<int>();
List<ushort> returnValue = new List<ushort>();
for (i = 0; i < PixelBuffer.Length; ++i)
{
i1 = i * 2;
signedData[0] = PixelBuffer[i1];
signedData[1] = PixelBuffer[i1 + 1];
short sVal = System.BitConverter.ToInt16(signedData, 0);
int pixVal = (int)(sVal * rescaleSlope + rescaleIntercept);
tempInt.Add(pixVal);
}
int minPixVal = tempInt.Min();
SignedImage = false;
if (minPixVal < 0) SignedImage = true;
foreach (int pixel in tempInt)
{
ushort val;
if (SignedImage)
val = (ushort)(pixel - short.MinValue);
else
{
if (pixel > ushort.MaxValue) val = ushort.MaxValue;
else val = (ushort)(pixel);
}
returnValue.Add(val);
}
相关文章:
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 访问随机图像像素的快速方法,最多一次
- 计算另一个图像像素满足条件的像素值的平均值
- 如何返回定义良好的内存部分?例如来自图像数据的像素的颜色值
- 如何将像素图像导入cpp
- OpenCV-如何将vale添加到图像一部分的所有像素
- 访问和更改基于另一个图像的像素颜色-opencv c++
- 免费图像写入像素
- 可视化 如何获取图像中像素的颜色(以C++ (sfml) 为单位)
- 将像素打包在盒子中的 1 位/带宽/二进制图像中
- 如何使用 openCV 更改图像每个像素的颜色
- 使用 ImageMagick 从像素强度数组创建灰度图像时遇到问题
- 如何从C 中的CV :: MAT图像中有效提取某些像素
- OPENCV C .在for循环中在不同的图像像素上绘制一个圆圈(应在每个循环运行时将图像打开)
- 图像分割 - 删除C 中不需要的像素
- 如何使用Imebra库将压缩像素(用我自己的编码器压缩)回到DICOM图像文件中
- 如何确定 BMP 图像是否包含来自标题的 BGR 或 BGRA 像素
- 如何使用opencv在不丢失像素的情况下对图像进行去扭曲
- 内存中一个像素图像数据的表示形式
- 如何显示已保存在文件中的像素图像