【问题标题】:Calculation of entropy of an Image using JAVA使用 JAVA 计算图像的熵
【发布时间】:2014-03-08 06:16:33
【问题描述】:

我正在开发一个图像加密程序,作为我的 Java 学术项目的一部分。该项目的输出将是一个加密图像。现在我需要计算原始图像和加密图像的熵以进行分析这个公式

如何使用 Java 根据这个方程找到图像的熵

【问题讨论】:

  • 问题是什么?
  • 抱歉更新了问题
  • 您希望有人为您编写完整的代码?
  • 先搞懂逻辑。 p_i 是符号i 出现的概率。 i1 变为 n。在灰度图像中,i 将采用 0-255 之间的值。因此,您只需计算i 出现的总次数除以总数。图像中的像素。这将成为您的p_i。对i 的所有值执行此操作,并使用等式 (4) 进行计算。这应该不难。
  • 那我应该先转灰度吗?

标签: java matlab image-processing encryption


【解决方案1】:

这是我开发的代码,使用它计算的熵值与 Matlab 中的 entropy() 一致,因此我假设它是正确的,否则请告诉我

      public static double getShannonEntropy_Image(BufferedImage actualImage){
 List<String> values= new ArrayList<String>();
             int n = 0;
             Map<Integer, Integer> occ = new HashMap<>();
             for(int i=0;i<actualImage.getHeight();i++){
                 for(int j=0;j<actualImage.getWidth();j++){
                   int pixel = actualImage.getRGB(j, i);
                   int alpha = (pixel >> 24) & 0xff;
                   int red = (pixel >> 16) & 0xff;
                   int green = (pixel >> 8) & 0xff;
                   int blue = (pixel) & 0xff;
 //0.2989 * R + 0.5870 * G + 0.1140 * B greyscale conversion
//System.out.println("i="+i+" j="+j+" argb: " + alpha + ", " + red + ", " + green + ", " + blue);
                   int d= (int)Math.round(0.2989 * red + 0.5870 * green + 0.1140 * blue);
                  if(!values.contains(String.valueOf(d)))
                      values.add(String.valueOf(d));
                  if (occ.containsKey(d)) {
                      occ.put(d, occ.get(d) + 1);
                  } else {
                      occ.put(d, 1);
                  }
                  ++n;
           }
        }
        double e = 0.0;
        for (Map.Entry<Integer, Integer> entry : occ.entrySet()) {
             int cx = entry.getKey();
             double p = (double) entry.getValue() / n;
             e += p * log2(p);
        }
 return -e;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    相关资源
    最近更新 更多