【问题标题】:Finding two major peaks and the valleys between the peaks of a 2D array or histogram查找二维阵列或直方图的两个主要峰和峰之间的谷
【发布时间】:2013-09-05 09:44:09
【问题描述】:
for (int i = 0; i < c.length; i++)
{
    for(int j=0; j<c[i].length;j++)
    {
         if(peak1[i]<c[i][j]){
         peak1[i] = c[i][j];
         peak1loc1[i]= j;
     }
}     


 println(peak1[2]);
 println(peak2[2]);`

这是我到目前为止所尝试的。出于某种原因,peak1peak2 正在打印相同的值。

我有一个保存图像的 RGB 颜色值的二维数组。我想找到每个通道(r,g,b)的两个主峰,以及这两个主峰之间的山谷,所以我会得到两个红色的主峰,绿色的两个主峰,蓝色的两个主峰和一个谷(主峰之间的最小值),所以总共三个谷。

是否有任何算法可以解决这个问题,或者任何人都可以给我一些想法如何找到这些?伪代码会很有帮助。

【问题讨论】:

  • 你试过什么?似乎“2个主要山峰和介于两者之间的山谷”意味着您正在谈论一维数组。你想如何处理二维?
  • 例如数组将是这样的 int[0]={1,2,3,4,..256}
  • 您的代码无法编译,原因有几个。你真的尝试过什么?以您的示例为例,您期望得到什么答案?是否有一个红色数组,一个绿色数组,一个蓝色数组?

标签: java arrays algorithm image-processing


【解决方案1】:

也许是这样的?

import java.util.*;
color[][]  c = new color [10][2];


void setup() {
  for (int i = 0; i < c.length; i++) {
    for (int j = 0; j < c[0].length; j++) {
      c[i][j] = color(random(255), random(255), random(255));
    }
  }

  float[] reds = new float[c.length*c[0].length];

  for (int i = 0; i < reds.length; i++) {
    if ( i < c.length)
      reds[i] = red(c[i][0]);
    else
      reds[i]=red(c[i-c.length][1]);
  }
  println("\n unsorted red values");
  println(reds);
  Arrays.sort(reds);
  println("\nSORTED");
  println(reds);

  println("\n\n the bigger red value is: " + reds[reds.length-1]); 
  println("\n the 2nd bigger red value is: " + reds[reds.length-2]); 
  println("\n the smaller red value is: " + reds[0]); 
  println("\n\n cheers");
}

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 2013-05-26
    • 2012-11-21
    • 1970-01-01
    • 2017-02-22
    • 2021-12-29
    • 1970-01-01
    • 2013-01-24
    相关资源
    最近更新 更多