2016-03-18 64 views
0

我正在渲染一個mandelbrot集並已經實現了一些平滑的着色,但是當看得更近時,圖片變得非常嘈雜。我想知道,改善我的色彩以達到更好的美學效果的最佳方法是什麼?使用直方圖着色是否有助於消除粗糙的像素化區域? Here is a render of the fractal using 10 000 iterations.什麼是Mandelbrot平滑着色算法的最佳選擇

這是我生成和現在指定顏色的方式:

  BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 
      int black = 0; 
      int[] colors = new int[max]; //max is the maximum number of iterations 
      for (int i = 0; i<max; i++) { 
       colors[i] = Color.HSBtoRGB(i/256f, 1, i/(i+8f)); 
      } 
      for(int i = 0; i < colors.length/2; i++) 
      { 
       int temp = colors[i]; 
       colors[i] = colors[colors.length - i - 1]; 
       colors[colors.length - i - 1] = temp; 
      } 

      ... 
      ... 
      ... 

        if (iterations < max) image.setRGB(col, row, colors[iterations]); 
        else image.setRGB(col, row, black); 
       } 
      } 

      //ImageIO.write(image, "png", new File("mandelbrot_seeria90"+Integer.toString(i)+".png")); 
      ImageIO.write(image, "png", new File("resotest.png")); 
+0

這已經在這裏得到解答:http://stackoverflow.com/a/1243788/216248 – karatedog

+0

這個問題聽起來不像是要求顏色的平滑插值,而是爲了圖像的「一般平滑」 。這可能有點煩瑣(你不能用一些高斯來模糊最終圖像)。但是,對於每個像素,您可以取其中未超過迭代次數的周圍像素的平均值(即,所有周圍像素的「非黑色」的平均值) – Marco13

回答

0

一個可以產生可接受結果的簡單方法就是使用2x2,3x3或4x4超級採樣進行抗混疊,並通過平均4,9或9塊塊的顏色值(而不是迭代計數)來生成每個像素。 16個像素。

這種方法只是一種普通的圖像渲染技術,它沒有使用Mandelbrot分形的任何特定知識來解決該問題,但是您可以通過計算相鄰整像素的迭代計數並僅執行子採樣步驟來優化它if計數並不完全相同。這意味着你只會在重複計數的地方進行:在2次迭代計數之間的邊界處,或者在嘈雜的地方,並且有很多不同的計數相鄰。

您可以通過生成測試圖像然後在圖像編輯應用程序中通過縮放因子縮小測試圖像(請確保已打開過濾)來測試此功能。如果看起來不錯,那麼你可以通過在你現有的內部像素循環內增加一對額外的for循環來實現它,對於每個子像素,通過像素步長的1/2,1/3或者1/4增加c 。將顏色值相加併除以適當的量。

0

想想循環,是最終值達到一個週期的初始值,和你有幾個週期。

通過創建水平伽瑪來測試它,如顏色的|||| ... |||

喜歡的東西:

fill: 
for (int i = 0; i < max;) { 
    for (int h = 0; h < NH; ++h) { 
     float hValue = ((float)h)/NH; 
     for (int b = 0; b < NB; ++b) { 
      doublebValue = ((double)b)/NB; // 0 .. 1 
      bValue = Math.sin(2 * Math.PI * bValue); // -1 .. 1 
      bValue = (2 + bValue)/3; // 0.33 .. 1 
      colors[i] = Color.HSBtoRGB(hValue, 1, (float) bValue); 
      ++i; 
      if (i >= max) { 
       break fill; 
      } 
     } 
    } 
} 
0

而是太多的評論,但沒有一個明確的答案,對不起。

當輪廓廣泛傳播時,可以很容易地進行平滑的顏色分級,但是在M-集(「無限」迭代)附近,圖像顯然變得混亂,相鄰像素具有非常不同的迭代次數,所以它看起來很嘈雜。當變焦被創建時,這更加明顯,嘈雜的區域顯得「跳舞」。

我發現最好的解決方案是在這些區域使用灰度,基於8個相鄰像素的迭代差異。假設「無限」區域是黑色的,那麼這些灰色像素在鄰域中變化最大的地方會是最黑的,或者某些鄰居在M-Set上。在較淺的一面,當有一些深度相同的鄰居時,我會從中獲得一些色調。而在沒有相鄰深度相同的中間地帶,灰色的陰影將取決於它們的變化。

我用C和彙編(迭代)。

相關問題