【问题标题】:julia set color mapping朱莉娅设置颜色映射
【发布时间】:2020-04-12 00:14:24
【问题描述】:

我正在研究 java 中的 julia 集。以下是我的代码:

public class ColorJulia {


// return number of iterations to check z is in the Julia set of c
static int julia(Complex c, Complex z, int maximumIterations) {
    for (int t = 0; t < maximumIterations; t++) {
        if (z.abs() > 2.0) return t;
        z = z.times(z).plus(c);
    }
    return maximumIterations - 1;
}


public static void main(String[] args) {
    double real = -0.8;//Double.parseDouble(args[0]);      // a
    double imag = 0.1;//Double.parseDouble(args[1]);      // b
    Complex c = new Complex(real, imag);            // c = a + ib
    double xmin   = -2.0;
    double ymin   = -2.0;
    double width  =  4.0;
    double height =  4.0;

    int n = 512;
    int ITERS  = 256;
    int freq[]=new int[256];

    Arrays.fill(freq, 0);

    Picture picture = new Picture(n, n);


    // read in color map
    Color[] colors = new Color[ITERS];
    for (int t = 0; t < ITERS; t++) 
    {
        int r = t;
        int g = t;
        int b = t;
        colors[t] = new Color(r, g, b);
    }

        for (int col = 0; col < n; col++) 
        {
            for (int row = 0; row < n; row++) 
            {
                double x = xmin + col * width / n;
                double y = ymin + row * height / n;
                Complex z = new Complex(x, y);
                int t = julia(c, z, ITERS);
                freq[t]++;
                Color testPixel = new Color(t,t,t);

                picture.set(col, row, testPixel);
            }
        }

        picture.show();



    for(int i=0;i<256;i++)
    {
        System.out.println("freq " + i + " = " + freq[i]);
    }        

  }

}

现在,我得到如下输出图像:

如何获得具有更好映射的图像,如下图所示?

在 julia set 中,我使用迭代的返回值生成 RGB 颜色。我不知道如何映射这些颜色以获得更好的图像。

【问题讨论】:

  • 尝试使用t / ITERS255 / ITERS 而不是t,这取决于您的像素使用的RGB 强度范围(不是JAVA 编码器)。您还可以通过任何渐变映射将t 重新映射为颜色,这是我最喜欢的:RGB of visible spectra 只需线性插值t 以匹配波长范围......您也可以交叉检查我的Mandelbrot set I did some years back
  • 嘿一个错字,第二个温度应该是粗糙的255*t / ITERS(编辑太晚了)

标签: java image algorithm


【解决方案1】:

我会制作一个直方图,看看哪些颜色值(在哪些值范围内)在您生成的图像中出现的频率。 根据这些信息,您可以决定要使用的颜色映射。

乍一看,您似乎只会变得黑乎乎的。如果是这种情况,直方图将显示。

如果你发现
julia(Complex c, Complex z, int maximumIterations)

总是返回 0ITERS-1 ,你需要增加 ITERS 以获得更多不同的值。


附言
您还可以在 www.
中找到许多颜色映射方法。 例如 here 是一个使用模数循环多次颜色的实现。

【讨论】:

    【解决方案2】:

    首先更改您的参数。现在对于您的图像,它是 c= -0.8+0.1*i ,它位于 Mandelbrto 集(= 连接的 Julia 集)的第 2 周期分量内。在第二张图片上,它是断开的 Juli 集(在 Mandelbrot 集之外),如:c = -0.800043099666580 +0.164138006668392 i

    第二个:大概是轨道陷阱算法:

    HTH

    【讨论】:

      猜你喜欢
      • 2014-03-29
      • 2018-11-27
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 2014-12-31
      • 2017-01-15
      • 2016-02-18
      相关资源
      最近更新 更多