matlab - 为什么积分图像包含额外的零行和零列?

标签 matlab opencv image-processing javacv gaussian

我正在学习如何使用带有 Java API 的 opencv 来使用积分图像,并且我创建了一个测试来显示使用积分图像之前和使用之后的灰度图像。灰度图像为 10 x 10,当我将其转换为积分图像时 我发现它是 11 x 11,带有额外的零行和额外的零列,如下面的输出所示。

请告诉我为什么积分图像包含额外的零行和零列?

代码:

    public static void main(String[] args) {
    MatFactory matFactory = new MatFactory();
    FilePathUtils.addInputPath(path_Obj);
    Mat bgrMat = matFactory.newMat(FilePathUtils.getInputFileFullPathList().get(0));
    Mat gsImg = SysUtils.rgbToGrayScaleMat(bgrMat);

    Log.D(TAG, "MainClas", "gsImg.dump(): " + gsImg.dump());
    Mat integralMat = new Mat();
    Imgproc.integral(gsImg, integralMat, CvType.CV_32F);

    Log.D(TAG, "MainClas", "sumMat.dump(): " + integralMat.dump());
}

输出:

    1: Debug: MainClass -> MainClas: gsImg.dump(): [2, 1, 7, 5, 1, 11, 2, 7, 9, 11;
        1, 2, 0, 0, 3, 20, 17, 5, 7, 8;
        4, 8, 0, 2, 6, 30, 31, 5, 2, 2;
        39, 43, 47, 44, 38, 62, 60, 37, 37, 39;
        27, 29, 52, 52, 47, 75, 67, 59, 58, 63;
        25, 21, 49, 51, 51, 78, 64, 66, 76, 80;
        40, 36, 50, 46, 41, 56, 42, 45, 47, 49;
        13, 17, 20, 15, 9, 20, 15, 19, 12, 11;
        17, 13, 8, 5, 4, 7, 13, 20, 17, 17;
        2, 4, 7, 9, 8, 6, 6, 7, 7, 8]
    2: Debug: MainClass -> MainClas: sumMat.dump(): [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0;
        0, 2, 3, 10, 15, 16, 27, 29, 36, 45, 56;
        0, 3, 6, 13, 18, 22, 53, 72, 84, 100, 119;
        0, 7, 18, 25, 32, 42, 103, 153, 170, 188, 209;
        0, 46, 100, 154, 205, 253, 376, 486, 540, 595, 655;
        0, 73, 156, 262, 365, 460, 658, 835, 948, 1061, 1184;
        0, 98, 202, 357, 511, 657, 933, 1174, 1353, 1542, 1745;
        0, 138, 278, 483, 683, 870, 1202, 1485, 1709, 1945, 2197;
        0, 151, 308, 533, 748, 944, 1296, 1594, 1837, 2085, 2348;
        0, 168, 338, 571, 791, 991, 1350, 1661, 1924, 2189, 2469;
        0, 170, 344, 584, 813, 1021, 1386, 1703, 1973, 2245, 2533]

最佳答案

这是预期的行为。注意积分图像sum(X,Y)在 OpenCV 中定义为 ( see documentation here ) 原始图像中索引小于 sum_(x < X, y < Y) 的像素总和,不小于或等于积分图像的那些。因此 sum(0,0)例如将是零像素的总和,定义为 0。这也是生成的总和图像比原始图像多一个行和列的原因。

这样做的原因是它可以更容易地计算图像 block 的总和等,并在它们包含顶部和/或左侧边框时以统一的方式处理它们。

关于matlab - 为什么积分图像包含额外的零行和零列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30195420/

相关文章:

c++ - 如何使用 SSE 将 _m128i 转换为 unsigned int?

matlab - 如何在 Matlab 中比较两个不同维度的矩阵并获得相等行的频率?

image - 使用openCV从ROS处理深度图像消息

opencv - 使用 HSV 和 HoughCircles 通过 OpenCV 检测彩色球体

python-2.7 - OpenCV,网络摄像头窗口未打开

image - 如何在 MATLAB 中读取 RAW 图像?

c++ - OpenCV 中的 Matlab fft2 函数

matlab - 是否有区分标量和向量的命名约定?

matlab - 如何覆盖matlab中的帮助功能?

java - 使用Buffered Image写入RGB图像