Я добавляю билинейную фильтрацию в свое программное обеспечение для рендеринга C ++. Чтобы подтвердить, что это работает, я пытаюсь снизить тестовое изображение. />
< /p> , когда я выполняю билинеарное изменение, я, к сожалению, получу почти тот же псевдоним. Почему ???
template
inline T TImage::getNormalizedPixelFromRatio(const Math::Vec2& ratio) const
{
const uint32_t widthMinusOne = getWidth() - 1u;
const uint32_t heightMinusOne = getHeight() - 1u;
// The sampling weights.
const Math::Vec2 C00Float = Math::Vec2(ratio.x * (float)getWidth(), ratio.y * (float)getHeight());
const Math::Vec2 weights = glm::fract(C00Float);
// The sampling coordinates.
const Math::Uvec2 C00 = Math::Uvec2(
Math::clamp((uint32_t)C00Float.x, 0u, widthMinusOne),
Math::clamp((uint32_t)C00Float.y, 0u, heightMinusOne));
const Math::Uvec2 C10 = Math::Uvec2(
Math::clamp(C00.x + 1u, 0u, widthMinusOne),
Math::clamp(C00.y, 0u, heightMinusOne));
const Math::Uvec2 C01 = Math::Uvec2(
Math::clamp(C00.x, 0u, widthMinusOne),
Math::clamp(C00.y + 1u, 0u, heightMinusOne));
const Math::Uvec2 C11 = Math::Uvec2(
Math::clamp(C00.x + 1u, 0u, widthMinusOne),
Math::clamp(C00.y + 1u, 0u, heightMinusOne));
// The sampling values.
const T V00 = getNormalizedPixelFromPosition(C00);
const T V10 = getNormalizedPixelFromPosition(C10);
const T V01 = getNormalizedPixelFromPosition(C01);
const T V11 = getNormalizedPixelFromPosition(C11);
// Perform the interpolation.
const auto lerp = [](T t1, T t2, float t3) { return t1 + (t2 - t1) * t3; };
const T p0 = lerp(V00, V01, weights.y);
const T p1 = lerp(V10, V11, weights.y);
return lerp(p0, p1, weights.x);
< /code>
} < /p>
[b] Что я делаю не так? Спасибо за помощь :) [/b]
Я не думаю, что это вообще связано, но мы никогда не знаем. Я использую OpenCV для хранения и управления своими изображениями.
Когда я использую нативные изменения размера, дает также те же результаты для отбора проб точки: O < /p>
inline void BilinearScaling(const RGB32FImage& src, RGB32FImage& dest)
{
cv::resize(src.m_image,
dest.m_image,
cv::Size(dest.getWidth(), dest.getHeight()),
0.0,
0.0,
cv::InterpolationFlags::INTER_LINEAR);
}
в любом случае это не поможет, если он работает, потому что мне нужно интерполировать вручную . Моя последняя цель - интерполировать набор коэффициентов 8 сферических гармоник, а не цвет RGB или RGBA.
Еще раз!
Я добавляю билинейную фильтрацию в свое программное обеспечение для рендеринга C ++. Чтобы подтвердить, что это работает, я пытаюсь снизить тестовое изображение. /> < /p> [b], когда я выполняю билинеарное изменение, я, к сожалению, получу почти тот же псевдоним. Почему ???[code] const Graphics::Texture::SharedRGBAImagePtr input_image = Texture::Helper::createRGBAImage("D:\\resizing_test\\input_image.png");
// The sampling values. const T V00 = getNormalizedPixelFromPosition(C00); const T V10 = getNormalizedPixelFromPosition(C10); const T V01 = getNormalizedPixelFromPosition(C01); const T V11 = getNormalizedPixelFromPosition(C11);
// Perform the interpolation. const auto lerp = [](T t1, T t2, float t3) { return t1 + (t2 - t1) * t3; };
const T p0 = lerp(V00, V01, weights.y); const T p1 = lerp(V10, V11, weights.y);
return lerp(p0, p1, weights.x); < /code> } < /p> [b] Что я делаю не так? Спасибо за помощь :) [/b] Я не думаю, что это вообще связано, но мы никогда не знаем. Я использую OpenCV для хранения и управления своими изображениями. Когда я использую нативные изменения размера, дает также те же результаты для отбора проб точки: O < /p> inline void BilinearScaling(const RGB32FImage& src, RGB32FImage& dest) { cv::resize(src.m_image, dest.m_image, cv::Size(dest.getWidth(), dest.getHeight()), 0.0, 0.0, cv::InterpolationFlags::INTER_LINEAR); } [/code] [b] в любом случае это не поможет, если он работает, потому что мне нужно интерполировать вручную [/b]. Моя последняя цель - интерполировать набор коэффициентов 8 сферических гармоник, а не цвет RGB или RGBA. Еще раз!