当前位置: 首页 > 知识库问答 >
问题:

转换16位图像的选项

狄信然
2023-03-14

当我以tiff格式打开一个16位图像时,它会以黑色图像的形式打开。16位tiff图像仅在程序ImageJ中打开;但是,它不会在预览中打开。我想知道我现在的选择是什么,以一种不降低分辨率的更简单的方式查看格式,而不是打开ImageJ查看它。我是否应该将其转换为8位格式,但当格式从16位减少到8位时,是否会丢失数据?另外,我正在考虑将tiff图像转换为jpeg,但这会导致分辨率降低吗?

共有2个答案

董阳平
2023-03-14

将16位图像更改为8位图像可能会降低对比度,但不一定会降低分辨率。分辨率的降低将来自像素数量的改变。要将16位转换为8位,像素的数量将是相同的,但位深度将发生变化。

16位无符号灰度图像中的最大像素值为2^16-18位无符号灰度图像中的最大像素值为2^8-1

分辨率会受到影响的一种情况是,如果一个16位图像包含一组像素值x的像素,另一组像素值x1并转换为一个8位图像,将像素映射到相同的值“y”,则无法解析这两组像素。

如果您查看最大和最小像素值,您很可能能够在不丢失任何数据的情况下转换为8位图像。

如果8位图像中的信息减少,您可以使用各种指标执行转换和检查。一个这样的指标是熵。如果您没有丢失任何数据,这个数量应该是相同的。请注意,相反不一定是真的,即仅仅因为熵相同并不意味着数据相同。

如果您想要更多关于如何验证转换的建议,并查看是否丢失了任何数据,请告诉我。

魏宸
2023-03-14

从ImageJ wiki的疑难解答页面:

如果将12位、14位或16位图像加载到ImageJ中而不自动缩放,则可能会出现此问题。在这种情况下,即使实际数据值通常跨越更小的范围,显示器也会缩放到完整的16位范围(0-65535强度值)。例如,在12位相机上,最大可能的强度值为4095,但当0映射为黑色,65535映射为白色时,4095最终(线性)映射为非常深的灰色,人眼几乎看不见。

您可以通过单击图像来修复此问题▶ 调整▶ 亮度/对比度。。。然后按下自动按钮。

通过将鼠标移到图像上,并查看主ImageJ窗口状态栏区域中的像素探测器输出,可以验证是否存在实际数据。

换句话说,您的图像实际上不太可能全部为0值,而是显示范围可能未设置为与数据范围对齐。如果图像的强度值范围在67到520之间,但存储为16位图像(潜在值范围在0到65535之间),则默认显示范围也为0=黑色,65535=白色,介于两者之间的值将线性缩放。因此,所有这些值(57到520)都将显示为接近黑色。自动缩放时,它会重置显示范围以匹配数据范围,使值67及以下显示为黑色,值520及以上显示为白色,两者之间的所有内容都会线性缩放。

如果使用Bio Formats插件将图像导入ImageJ,则可以选中“自动缩放”选项以确保自动进行动态显示范围缩放。

至于是否转换为JPEG: JPEG是一种有损压缩格式,它有自己的问题。如果你要做任何定量分析,我强烈建议不要转换到JPEG。有关更多详细信息,请参阅斐济维基在JPEG上的文章。

类似地,如果您只想在另一个应用程序中可视化,则转换为8位也可以,但对下转换的图像执行定量分析通常是错误的。请注意,当ImageJ将16位图像转换为8位图像时(使用

 类似资料:
  • 问题内容: 我正在尝试从相机预览中捕获图像并在其上进行一些绘制。问题是,我只有大约3-4 fps的绘图,并且一半的帧处理时间是从摄像机预览接收和解码NV21图像并将其转换为 位图 。我有一个执行此任务的代码,是在另一个堆栈问题上找到的。它似乎并不快,但我不知道如何优化它。在Samsung Note 3(图像尺寸1920x1080)上大约需要100-150毫秒。我怎样才能使其更快地工作? 代码: 图

  • 我是第一次使用openCV。我正在使用openCV3和XCode对其进行编码。我想创建一个16位的灰度图像,但我想我有的数据是这样定义的,4000是像素值为白色和0为黑色。我在int类型的数组中有这些像素的信息。如何创建Mat并将数组中的值分配给Mat?

  • 我得到了一个字节数组,存储了一个已经解构的DICOM文件中的16位像素数据。我现在需要做的是以某种方式将像素数据转换/导出为TIFF文件格式。我使用imageio-tiff-3.3.2.jar插件来处理tiff转换/头数据。但是现在我需要将该图像数据数组打包到原始图像维度的BufferedImage中,以便将其导出到TIFF。但是BufferedImage似乎不支持16位图像。有没有办法解决这个问

  • 问题内容: 如果我的窗口处于32位色深模式,那么下面的代码将从窗口中获取漂亮的PIL图像: 但是,以16位模式运行时,出现错误: 我应该如何形成以16位模式工作的电话?另外,如何使该函数在任何位深度模式下都能工作,而不必说必须将其作为参数传递呢? 更新:从这个问题中,我了解到我必须对第二个模式参数使用“ BGR; 16”而不是“ BGRX”。它可以拍出正确的照片,无论是否指定步幅。问题是像素值在某

  • 问题内容: 我想将位图打印到移动蓝牙打印机(Bixolon SPP-R200)-SDK不提供直接方法来打印内存图像。所以我想到了这样转换一个位图: 到单色位图。我正在使用Canvas在给定的位图上方绘制黑色文本,效果很好。但是,当我将上述位图转换为ByteArray时,打印机似乎无法处理这些字节。我怀疑我需要一个每个像素一位的数组(一个像素将是白色= 1或黑色= 0)。 似乎没有方便的开箱即用的方

  • 我想把openCV Mat文件转换成GDI+位图图像。我找不到任何关于如何做到这一点的信息?