java - 逐点图像处理——直方图均衡化(处理)

标签 java image-processing processing

我真的对这种技术感到困惑。我知道直方图是每个值的频率(我正在处理灰度图像)并且我已经产生了一种方法来做到这一点:

int[] populateHist (PImage x)
{
  x.loadPixels();
  int[] out = new int[256];
  for (int i = 0; i < x.pixels.length; i++)
  {
     out[(int)red(x.pixels[i])]++;
  }
  return out;
}

以及累积数组的扩散函数:

int[] spreadFunc (int[] a)
{
  int[] out = new int[256];
  for (int i = 0; i < a.length; i++)
  {
    if (i == 0)
    {
      out[i] = (a[i]);
    }
    else
    out[i] = (a[i]) + (a[i-1]);
  }
  return out;
}

下一步是对这些值进行归一化,那么取最大值并将所有值除以相同的特定数字以使最大值现在为 255 是否正确?

此外,另一件让我感到困惑的事情是,即使在对直方图进行归一化之后,我如何才能使用散布的像素值重新创建图像?

最佳答案

首先您获得 CDF(累积分布函数)。这基本上是您的“传播函数”,但您应该对其进行归一化,使其从 0 变为 1(除以像素数,使用 double 值)。

其次,您重新映射像素值 y = cdf(x)*255

或者只执行 y = cdf(x) 并将最小值-最大值线性重新映射到 0-255 范围内,这基本上是同一回事。

参见例如 http://en.wikipedia.org/wiki/Histogram_equalization#Implementation

关于java - 逐点图像处理——直方图均衡化(处理),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10127287/

相关文章:

java - Meteor Collection-hooks 不适用于外部数据库修改

java - 什么工具可以为动态创建的查询建议索引和覆盖索引?

python-3.x - 使用 python 应用 Wiener 滤波器去除噪声

optimization - 优化灰度文本文档图像的 JPEG 量化表

java - 如何使带有外部库和文件的 Processing Sketch 在网站上运行?

java - 如何在处理中重新启动游戏?

java - 如何为java进程创建PID文件

java - XML DOM 创建混合内容

android - 如何在单个 ImageView 中获得不同的点击位置

node.js - 如何编写自定义发出事件以在 socket.io 中进行处理?