【问题标题】:I have a PGM format image with 8bpp 1024 X 1024 size and need to calculate GLCM (Grey Level Co-occurrence Matrix) from it我有一个 8bpp 1024 X 1024 大小的 PGM 格式图像,需要从中计算 GLCM(灰度共现矩阵)
【发布时间】:2012-05-20 14:40:27
【问题描述】:

图像很大,我使用getPixelsetPixel方法访问位,但发现它太慢了,所以我去实现锁定和解锁位,但无法理解它.我也浏览了鲍勃鲍威尔的教程,但教程却看不懂。所以,我在这里寻求一些帮助以从图像中获取 GLCM。

【问题讨论】:

  • 鲍勃·鲍威尔的教程在线吗?

标签: c# image image-processing glcm


【解决方案1】:

GLCM 通常是一种计算量很大的算法。它为每个邻居迭代每个像素。甚至 C++ 图像处理库也有这个问题。

然而,GLCM 确实非常适合并行(多线程)实现,因为每个参考像素的计算都是独立的。

关于使用锁定和解锁位,请参见下面的示例代码。要记住的一件事是,出于优化原因,可以填充图像。此外,如果您的图像具有不同的位深度或多个通道,您将需要相应地调整代码。

BitmapData data = image.LockBits(new Rectangle(0, 0, width, height), 
     ImageLockMode.ReadOnly, PixelFormat.Gray8);

byte* dataPtr = (byte*)data.Scan0;

int rowPadding = data.Stride - (image.Width);

// iterate over height (rows)
for (int i = 0; i < height; i++)
{
    // iterate over width (columns)
    for (int j = 0; j < width; j++)
    {
        // pixel value
        int value = dataPtr[0];

        // advance to next pixel
        dataPtr++;

    // at the end of each column, skip extra padding
    if (rowPadding > 0)
    {
        dataPtr += rowPadding;
    }
}

image.UnlockBits(data1);

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多