首页 > 编程语言 >图像缩放算法最近邻插值法

图像缩放算法最近邻插值法

时间:2024-03-27 09:02:19浏览次数:22  
标签:缩放 插值法 dstWidth 像素 int 算法 原始 图像

最近邻插值是一种简单且常用的图像缩放算法。它基于以下原理:对于目标图像中的每个像素,找到在原始图像中对应的最近的像素点,并将其灰度值赋给目标像素。

具体实现步骤如下:

  1. 计算目标图像与原始图像的尺寸比例关系,即缩放因子。缩放因子可以根据目标图像的宽度和高度与原始图像的宽度和高度之间的比值来计算。

    缩放因子(Scale Factor) = 目标图像尺寸 / 原始图像尺寸

  2. 遍历目标图像的每个像素,根据缩放因子计算出对应的原始图像坐标。

    原始图像坐标 = 目标图像坐标 / 缩放因子

  3. 将计算得到的原始图像坐标四舍五入至最近的整数,以获得最近的像素坐标。

  4. 将原始图像坐标对应的像素值赋给目标图像的对应像素。

最近邻插值算法的优点是实现简单,计算速度快。然而,它在对图像进行放大时可能会导致边缘锯齿状的伪像,并且无法处理图像中的细节信息。

以下是一个简化的示例代码,展示了最近邻插值算法的实现:

#include <iostream>
#include <cmath>

// 最近邻插值算法
void nearestNeighborInterpolation(const unsigned char* srcImage, int srcWidth, int srcHeight,
                                  unsigned char* dstImage, int dstWidth, int dstHeight) {
    float scaleX = static_cast<float>(srcWidth) / dstWidth;
    float scaleY = static_cast<float>(srcHeight) / dstHeight;

    for (int y = 0; y < dstHeight; ++y) {
        for (int x = 0; x < dstWidth; ++x) {
            int srcX = static_cast<int>(std::round(x * scaleX));
            int srcY = static_cast<int>(std::round(y * scaleY));

            int srcIndex = srcY * srcWidth + srcX;
            int dstIndex = y * dstWidth + x;

            dstImage[dstIndex] = srcImage[srcIndex];
        }
    }
}

int main() {
    // 原始图像尺寸和数据
    int srcWidth = 4;
    int srcHeight = 4;
    unsigned char srcImage[] = {
        1, 2, 3, 4,
        5, 6, 7, 8,
        9, 10, 11, 12,
        13, 14, 15, 16
    };

    // 目标图像尺寸和数据
    int dstWidth = 8;
    int dstHeight = 8;
    unsigned char dstImage[64];

    // 使用最近邻插值算法进行图像缩放
    nearestNeighborInterpolation(srcImage, srcWidth, srcHeight, dstImage, dstWidth, dstHeight);

    // 输出目标图像像素值
    for (int y = 0; y < dstHeight; ++y) {
        for (int x = 0; x < dstWidth; ++x) {
            std::cout << static_cast<int>(dstImage[y * dstWidth + x]) << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

该示例中,我们首先定义了一个4x4的原始图像和一个8x8的目标图像。然后使用最近邻插值算法对原始图像进行缩放,得到目标图像。最后输出目标图像的像素值。

请注意,这只是一个简化的示例,实际的图像缩放可能涉及边界处理、图像通道数等更复杂的情况。实际应用中,建议使用现有的图像处理库或函数来实现图像缩放操作。

标签:缩放,插值法,dstWidth,像素,int,算法,原始,图像
From: https://blog.csdn.net/wangjiaweiwei/article/details/131924341

相关文章

  • 图像缩放算法双线性插值法
    双线性插值法是一种常用的图像缩放算法,它可以通过对原始图像中的像素进行加权平均来计算目标图像中的像素值。相比最近邻插值,双线性插值可以更准确地估计像素之间的灰度值。具体实现步骤如下:计算目标图像与原始图像的尺寸比例关系,即缩放因子。缩放因子可以根据目标图像的宽......
  • 代码随想录算法训练营第五十八天|● 739. 每日温度 ● 496.下一个更大元素 I
    每日温度 题目链接:739.每日温度-力扣(LeetCode)思路:很容易想到暴力解法。但超时也是很轻松的。classSolution{public:vector<int>dailyTemperatures(vector<int>&temperatures){//stack<int>dd;intdd=1;vector<int>result(tempe......
  • 算法模板收集 (截至2024.3.26)
    准备线下比赛用的模板,会一直更新,但更新频率不高。找个代码托管平台放一下或许更合适,不过暂时没心思做这个。小提示:点击任意标题旁边的“显示目录导航”,再点击右上角的图钉可以固定目录。约定:所有区间操作都是在闭区间上进行的。编译器要支持gnu++11标准基本框......
  • 「杂文」蒙特卡洛树搜索算法实现黑白棋 AI
    目录写在前面实验内容实验要求实验环境实验原理蒙特卡洛方法(MonteCarlomethod)蒙特卡洛树搜索(MonteCarlotreesearch)代码结构Infomation.pyBoard.pyNode.pyAI.pyWidget.py代码写在最后写在前面人工智能实验报告。妈的我真的不会写实验报告,感觉一堆屁话妈的下棋下不过爆搜,感......
  • 代码随想录算法训练营day35 | leetcode 860. 柠檬水找零、406. 根据身高重建队列、452
    目录题目链接:860.柠檬水找零-简单题目链接:406.根据身高重建队列-中等题目链接:452.用最少数量的箭引爆气球-中等题目链接:860.柠檬水找零-简单题目描述:在柠檬水摊上,每一杯柠檬水的售价为5美元。顾客排队购买你的产品,(按账单bills支付的顺序)一次购买一杯。每位顾客只买一......
  • 代码随想录算法训练营第二十一天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众
    文档链接:https://programmercarl.com/LeetCode530.二叉搜索树的最小绝对差题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in-bst/思路:二叉搜索树记得使用中序遍历最方便!注意是二叉搜索树,二叉搜索树可是有序的。遇到在二叉搜索树上求什么最值啊,差值之......
  • 代码随想录算法训练营第十七天|110.平衡二叉树、257.二叉树的所有路径、404.左叶子之
    文档链接:https://programmercarl.com/LeetCode110.平衡二叉树题目链接:https://leetcode.cn/problems/balanced-binary-tree/思路:这里强调一波概念:二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数......
  • 【蓝桥杯省赛真题33】python单词排序 中小学青少年组蓝桥杯比赛 算法思维python编程省
     目录python单词排序一、题目要求1、编程实现2、输入输出二、算法分析三、程序编写四、程序说明五、运行结果六、考点分析七、 推荐资料1、蓝桥杯比赛2、考级资料3、其它资料python单词排序第十三届蓝桥杯青少年组python比赛省赛真题一、题目要求(注:input......
  • 趣味算法,猴子算法。python如何实现猴子算法
    给一只猴子一台打印机,虽然这只猴子根本不识字,但会乱按,经过一段时间后,在它乱按出来的单词里总能找到一些至少看起来是有意义的部分,比如一两个简短的单词,由此可以推出:只要给它足够长的时间,猴子甚至能完整地写出一本莎士比亚全集。这是不是听起来很有意思趣味算法,猴子算法。......
  • 一口气搞懂分库分表 12 种分片算法,大厂都在用
    大家好,我是小富~前言本文是《ShardingSphere5.x分库分表原理与实战》系列的第五篇文章,我们一起梳理下ShardingSphere框架中的核心部分分片策略和分片算法,其内部针为我们提供了多种分片策略和分片算法,来应对不同的业务场景,本着拿来即用的原则。这次将详细介绍如何在ShardingSpher......