Tim*_*lus 5 graphics rendering image-processing subpixel
我有一个系统需要在屏幕上移动图像.我目前正在使用png并将其放置在所需的屏幕坐标处.
由于屏幕分辨率和所需帧速率的组合,一些帧是相同的,因为图像尚未移动整个像素.不幸的是,屏幕的分辨率是不可协商的.
我对子像素渲染如何平滑边缘有一个大致的了解,但我一直无法找到资源(如果存在)我如何使用着色来将图像转换少于一个像素.
理想情况下,这可以用于任何图像,但如果它只能用简单的形状像圆形或环形,那也是可以接受的.
Pau*_*l R 10
子像素插值相对简单.通常,您应用相当于具有恒定相移的全通滤波器,其中相移对应于所需的子像素图像偏移.根据所需的图像质量,您可以使用例如5点Lanczos或其他窗口sinc功能,然后根据您是要X换档还是Y换档或两者,将其应用于一个或两个轴.
例如,对于0.5像素的移位,系数可能是[ 0.22954, 0.65507, 0.95725, 0.95725, 0.65507 ].为了产生水平位移,你会卷积这些系数从像素x - 2到x + 2,如
const float kCoeffs[5] = { 0.22954f, 0.65507f, 0.95725f, 0.95725f, 0.65507f };
for (y = 0; y < height; ++y) // for each row
for (x = 2; x < width - 2; ++x) // for each col (apart from 2 pixel border)
{
float p = 0.0f; // convolve pixel with Lanczos coeffs
for (dx = -2; dx <= +2; ++dx)
p += in[y][x + dx] * kCoeffs[dx + 2];
out[y][x] = p; // store interpolated pixel
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6414 次 |
| 最近记录: |