【问题标题】:Convert an existing Kinect RGB infrared image to an array of distances将现有 Kinect RGB 红外图像转换为距离数组
【发布时间】:2019-04-18 15:47:29
【问题描述】:

我有一张在 Mac 上使用 OpenKinect 的 Kinect 红外输出的屏幕截图。

我想计算绿墙和橙色柱子的距离。我只关心一维数组,比如 y = 240(沿着图像的水平中心)。

我曾尝试使用 MarvinJ 将图像转换为灰度并将颜色值保存到数组中,但我很快发现这不是解决此问题的方法,因为灰度图像的整数颜色值非常相似,不能很好地代表深度。

<!doctype html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Greyscale Test</title>
</head>

<body>

    <script src="https://www.marvinj.org/releases/marvinj-0.9.js"></script>
<script>
    image = new MarvinImage();
    image.load("ir_test.png", imageLoaded);


function imageLoaded() {
    var imageOut = new MarvinImage(image.getWidth(), image.getHeight());
    var image2 = new MarvinImage(image.getWidth(), image.getHeight());
    Marvin.invertColors(image, image2);
    Marvin.invertColors(image2, imageOut);
    var y = 240;
    var colour_array = [];
    for (var x = 0; x < imageOut.getWidth(); x++) { // For loop to loop through the x-axis

        var colour = imageOut.getIntComponent0(x, y);
        colour_array.push(colour);

    }

    document.getElementById('colour_array_div').innerHTML = colour_array;
}
</script>
    <div id="colour_array_div"></div>

</body>
</html>

我正在努力解决的是如何将颜色转换为距离,最好以毫米为单位。

【问题讨论】:

    标签: kinect openkinect


    【解决方案1】:

    我最终将每个像素转换为它们的 RGB 十六进制值,然后将十六进制值转换为十进制数。

    这给了我一个介于 0 和 16777215 之间的值。

    我将输出复制到 CSV 文件,然后在 Excel 中处理每个像素的值。我将十进制颜色值转换为以米为单位的距离。

    我发现 Kinect 的深度传感器的范围是 0.8m-3.5m [https://openkinect.org/wiki/Imaging_Information]

    我使用以下问题的答案将十进制值转换为米值:Excel Function name to map one ratio to another

    值/(inhi-inlo)*(outhi-outlo)+outlo

    这是输出的图表:

    我用来生成十进制颜色值数组的代码是:

    <!doctype html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <title>Colour Test</title>
    </head>
    
    <body>
    
        <script src="https://www.marvinj.org/releases/marvinj-0.9.js"></script>
    <script>
        image = new MarvinImage();
        image.load("ir_test.png", imageLoaded);
    
    
    function imageLoaded() {
        var imageOut = new MarvinImage(image.getWidth(), image.getHeight());
        var image2 = new MarvinImage(image.getWidth(), image.getHeight());
        Marvin.invertColors(image, image2);
        Marvin.invertColors(image2, imageOut);
        var y = 240;
        var colour_array = [];
        for (var x = 0; x < imageOut.getWidth(); x++) { // For loop to loop through the x-axis
    
            var red = imageOut.getIntComponent0(x, y);
            var green = imageOut.getIntComponent1(x, y);
            var blue = imageOut.getIntComponent2(x, y);
            var hex_colour = rgbToHex(red,green,blue);
            var colour = parseInt(hex_colour, 16); //https://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hexadecimal-in-javascript
            colour_array.push(colour);
    
        }
    
        document.getElementById('colour_array_div').innerHTML = colour_array;
    }
    
    //https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
    function componentToHex(c) {
        var hex = c.toString(16);
        return hex.length == 1 ? "0" + hex : hex;
    }
    
    function rgbToHex(r, g, b) {
        return componentToHex(r) + componentToHex(g) + componentToHex(b);
    }
    
    
    
    </script>
        <div id="colour_array_div"></div>
    
    </body>
    </html>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-22
      • 1970-01-01
      • 2015-04-08
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2011-12-07
      相关资源
      最近更新 更多