C++ Image interpolation with Bicubic method
我只是想通过 BiCubic 插值来平滑图像。我得到了一些用于插入 RGB 图像的代码。我已更改代码以适用于灰度图像。但结果我只得到了全黑的图像。考虑的输入和输出图像大小相同。代码粘贴在下面。请帮我。提前致谢。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
inline Uint16 saturate(float x, unsigned max_pixel) { return x > max_pixel ? max_pixel : x < 0.0f ? 0 : Uint16(x); } inline float get_subpixel(const Uint16* in, std::size_t dest_width, std::size_t dest_height, unsigned x, unsigned y) return 0; void interpolate(unsigned dest_width, unsigned dest_height, unsigned bits_allocated, const Uint16* src, Uint16** dest) for (unsigned i = 0; i < dest_height; ++i) for (int jj = 0; jj < 4; ++jj) d0 = C[0] – C[1]; |
你怎么会有这个?直到 jj 循环结束才计算 c//’s 大括号应该在 d//’s 之上-否则我不考虑该方法是否正确。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
for (int jj = 0; jj < 4; ++jj) { const int idx = y – 1 + jj; float a0 = get_subpixel(src, dest_width, dest_height, x, idx); float d0 = get_subpixel(src, dest_width, dest_height, x – 1, idx) – a0; float d2 = get_subpixel(src, dest_width, dest_height, x + 1, idx) – a0; float d3 = get_subpixel(src, dest_width, dest_height, x + 2, idx) – a0; float a1 = –(1.0f / 3.0f) * d0 + d2 – (1.0f / 6.0f) * d3; float a2 = 0.5f * d0 + 0.5f * d2; float a3 = –(1.0f / 6.0f) * d0 – 0.5f * d2 + (1.0f / 6.0f) * d3; C[jj] = a0 + a1 * dx + a2 * dx2 + a3 * dx3; // } // end jj d0 = C[0] – C[1]; |
我想分享很棒的链接
三次样条
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/268871.html