我希望對圖像產生影響,其中由此產生的圖像看起來好像我們通過有紋理的玻璃(非平滑/光滑)看待它...請幫我寫一個算法以產生這樣的效果。玻璃效果 - 藝術效果
這裏的效果我正在尋找
第一個圖像是原始圖像和第二圖像是輸出即時尋找的類型an example。
我希望對圖像產生影響,其中由此產生的圖像看起來好像我們通過有紋理的玻璃(非平滑/光滑)看待它...請幫我寫一個算法以產生這樣的效果。玻璃效果 - 藝術效果
這裏的效果我正在尋找
第一個圖像是原始圖像和第二圖像是輸出即時尋找的類型an example。
首先創建一個尺寸爲(width + 1) x (height + 1)
的噪聲圖,用於替換原始圖像。我建議使用某種perlin noise,以便位移不是隨機的。關於如何生成珀林噪音,有一個很好的link。
一旦我們有我們可以做這樣的事情的噪音:
Image noisemap; //size is (width + 1) x (height + 1) gray scale values in [0 255] range
Image source; //source image
Image destination; //destination image
float displacementRadius = 10.0f; //Displacemnet amount in pixels
for (int y = 0; y < source.height(); ++y) {
for (int x = 0; x < source.width(); ++x) {
const float n0 = float(noise.getValue(x, y))/255.0f;
const float n1 = float(noise.getValue(x + 1, y))/255.0f;
const float n2 = float(noise.getValue(x, y + 1))/255.0f;
const int dx = int(floorf((n1 - n0) * displacementRadius + 0.5f));
const int dy = int(floorf((n2 - n0) * displacementRadius + 0.5f));
const int sx = std::min(std::max(x + dx, 0), source.width() - 1); //Clamp
const int sy = std::min(std::max(y + dy, 0), source.height() - 1); //Clamp
const Pixel& value = source.getValue(sx, sy);
destination.setValue(x, y, value);
}
}
我不能給你一個具體的例子,但gamedev論壇&文章部分有很多圖像處理,3d渲染等黃金。 例如,這裏是an article談論使用卷積矩陣對圖像應用類似的效果,這可能是一個好的起點。
感謝安德烈亞斯。這正是我所期待的。再次感謝 – megha 2010-01-12 05:51:43