OpenCV vs Labview 图像灰度 (U16) - 值的差异

OpenCV vs Labview Images Greyscale (U16) - Difference in values

我想了解为什么 LabView 显示图像的一组值,而 OpenCV 显示另一组值。

我有两张 U16 灰度 PNG 图像,我试图将它们垂直组合以创建一张连续图像。大多数像素接近零或低值,ROI 的像素值在 U16 范围的中间。在 Python 中,这是通过使用 OpenCV 读取文件,使用 numpy 组合图像,然后使用 Matplotlib 显示值来实现的:

image_one = cv2.imread("..\filename_one.png", cv2.IMREAD_UNCHANGED)
image_two = cv2.imread("..\filename_two.png", cv2.IMREAD_UNCHANGED)
 
combined_image = numpy.concatenate((image_one, image_two), axis=0)
 
plt.figure(figsize=(15, 15), dpi=18) plt.imshow(combined_image,
cmap="gray", vmin=0, vmax=65535) //Sliced to show the ROI

双重曝光图像

如上所示,这表明图像具有两个不同的动态范围,从而导致不同的曝光。为了标准化图像,我们可以尝试重新缩放它以利用相同的动态范围。

rescaled_one = ((image_one - image_one.min()) / (image_one.max() -
image_one.min())) * 65535 rescaled_two = ((image_two -
image_two.min()) / (image_two.max() - image_two.min())) * 65535 

combined_rescaled = numpy.concatenate((rescaled_one, rescaled_two),
axis=0)
 
plt.figure(figsize=(15, 15), dpi=18) plt.imshow(combined_irescaled,
cmap="gray", vmin=0, vmax=65535) //Sliced to show the ROI

缩放图像 - 双重曝光

这仍然显示了与图像相同的问题。

在 LabView 中,为了垂直组合图像,我改编了一个已发布的 VI 以水平拼接图像: https://forums.ni.com/t5/Example-Code/Stitch-Images-Together-in-LabVIEW-with-Vision-Development-Module/ta-p/3531092?profile.language=en

最终 VI 框图如下所示:

VI 框图 - 使用 IMAQ 垂直组合图像

您在前面板上看到的输出:

单个连续图像 - 前面板

双重曝光问题似乎已经消失,图像现在显示为单个连续图像。这对我来说没有任何意义,所以我使用 Plotly 绘制结果如下:

fig = plty.subplots.make_subplots(1, 1, horizontal_spacing=0.05)
fig.append_trace(go.Histogram(x=image_one.ravel(), name="cv2_top",
showlegend=True, nbinsx = 13107), 1, 1)
fig.append_trace(go.Histogram(x=image_two.ravel(), name="cv2_bottom",
showlegend=True, nbinsx = 13107), 1, 1)
fig.append_trace(go.Histogram(x=lv_joined[:1024, :].ravel(),
name="LabView_joined_top", showlegend=True, nbinsx = 13107), 1, 1)
//First Image 
fig.append_trace(go.Histogram(x=lv_joined[1024:,:].ravel(), name="LabView_joined_bottom", showlegend=True, nbinsx =
13107), 1, 1) //Second Image fig.update_layout(height=800) fig.show()

直方图 - Python vs Labview 各自的一半 - 关注低 像素 Histogram - Python vs Labview respective halves - Focus on Low
pixels

此处显示第二张图像的像素值已被“压缩”以找到与第一张图像相同的分布。我不明白为什么会这样。我是否在 LabView 中配置了错误,或者在使用 OpenCV 读取文件时是否没有考虑到某些事情?

原始图片:

请参考此处发布的答案:[https://forums.ni.com/t5/LabVIEW/OpenCV-vs-Labview-Images-Greyscale-U16-Difference-in-values/td-p/4172150/highlight/false]