1

我将 Boost-GIL 库用于一些图像处理任务。首先,我将图像颜色分离为 RGB 通道并在每个通道上执行操作。就操作的可逆性而言,我注意到了一些奇怪的事情。可逆性原则意味着,如果我们重新组合通道以重建原始图像,我们应该得到与原始图像没有任何差异的原始图像。不幸的是,我没有看到这种行为。我附上了图像对作为问题的说明。左图为原图,右图为合成图。蓝色的优先级更高。我使用 Mathematica ColorCombine函数进行重新组合操作,作为交叉检查,我使用了 Mathematica ColorSeparate功能来执行相同的颜色分离操作。在ColorSeparate d 通道上应用ColorCombine后,我得到了没有单个像素差异的原始图像。此外,我在两个单独的图像上验证了这一点,并观察到只有蓝色通道与 Mathematica 实现不匹配。由于颜色分离是一项非常基本的操作,如果库中有问题,应立即修复。下面给出了从原始“.jpg”图像中分离颜色的代码。

boost::gil::rgb8_image_t img;
std::string image_path="Eiffel_towner.jpg";
boost::gil::read_image(image_path.c_str(), img, boost::gil::jpeg_tag());
auto pixel = std::move(img_view(x,y));
boost::gil::rgb32f_pixel_t pixel_f(pixel);
float pixel_red = boost::gil::at_c<0>(pixel_f);
float pixel_green = boost::gil::at_c<1>(pixel_f);
float pixel_blue = boost::gil::at_c<2>(pixel_f);

埃菲尔铁塔

通道保存为数据矩阵(例如“Eiffel_red.dat”、“Eiffel_green.dat”、“Eiffel_blue.dat”)并作为每个通道的颜色表导入 Mathematica。

red_channel = Import["Eiffel_red.dat","Table"];
green_channel = Import["Eiffel_green.dat","Table"];
blue_channel = Import["Eiffel_blue.dat","Table"];
composedImage=ColorCombine[{red_channel//Image, green_channel//Image, blue_channel//Image},"RGB"]//ImageAdjust;
4

0 回答 0