在Metal上实现对多通道feature map的双线性插值

unity中int转float_原神截帧分析(持续作案中...) 目前只整了角色渲染这部分。在PC上的大世界范围帧率明显下降。角色没有阴影,没有阴影的明暗过度角色渲染分析这张帧天空盒贴图中的命名MilkyWay用几张Noise图做出天空球 模拟银河系这张图用来模拟光线的扰动这张图用来模拟云这三张图用来模拟银河中的星星第一张图是固定的星星,第二张图是实时闪亮的星星,第三张图是星星闪烁随时间闪耀时的颜色lut图星星的动态变化Mesh是一个方块,且有 Perlin_W... 阅读详情
    kernel void resize_interpolation_array(
                                  texture2d_array<half, access::sample> inTexture [[texture(0)]],
                                  texture2d_array<half, access::write> outTexture [[texture(1)]],
                                  ushort3 gid [[thread_position_in_grid]])
    {
        if (gid.x >= outTexture.get_width() ||
            gid.y >= outTexture.get_height() ||
            gid.z >= outTexture.get_array_size()) return;

        constexpr sampler s(coord::pixel, filter::nearest, address::clamp_to_zero);

        const ushort2 pos = gid.xy;
        const ushort slice = gid.z;

        float scale_x = float(inTexture.get_width())/float(outTexture.get_width());
        float scale_y = float(inTexture.get_height())/float(outTexture.get_height());

        float i = scale_x * float(pos.x+0.5)-0.5; //this is a trick
        float j = scale_y * float(pos.y+0.5)-0.5; //this is a trick
        float i_ceil = ceil(i);
        float i_floor = floor(i);
        float j_ceil = ceil(j);
        float j_floor = floor(j);

        half4 in;
        in = inTexture.sample(s, float2(pos.x    , pos.y    ), slice);

        half4 f00 = inTexture.sample(s,float2(i_floor,j_floor),slice);
        half4 f10 = inTexture.sample(s,float2(i_ceil,j_floor),slice);
        half4 f01 = inTexture.sample(s,float2(i_floor,j_ceil),slice);
        half4 f11 = inTexture.sample(s,float2(i_ceil,j_ceil),slice);

        float4 r1 =(i_ceil-i)*float4(f01) + (i-i_floor)*float4(f11);
        float4 r2 = (i_ceil-i)*float4(f00) + (i-i_floor)*float4(f10);
        float4 out = (j-j_floor)*r1 + (j_ceil -j)*r2;

        outTexture.write(half4(out), gid.xy, gid.z);

    }

Reference:
http://handspeaker.iteye.com/blog/1545126
http://www.cnblogs.com/enigma19971/p/5828447.html
https://en.wikipedia.org/wiki/Bilinear_interpolation

DAC的通道数与采样率、数据率、插值系数的关系 阅读详情

相关推荐

metalmap:金属地图

金属地图 点击这里查看实时地图! 这是在Metal Archives上列出的所有乐队的地图可视化。 检查我的另一个项目以完全了解数据的来源。 我已经用ES6语法,Babel和GULP做到了这只是为了好玩。 并不是真的需要。

【图像处理】最近邻插值、双线性插值和双三次插值

但是大家只是在用这个算法,很少关注这个算法的实现细节:插值算法是如何工作的。上图效果是最近邻法的计算过程示意图,由上图可见,最近邻法不需要计算只需要寻找原图中对应的点,所以最近邻法速度最快,但是会破坏原图像中像素的渐变关系,原图像中的像素点的值是渐变的,但是在新图像中局部破坏了这种渐变关系。最近邻法实际上是不需要计算新图像矩阵中点的数值的,直接找到原图像中对应的点,将数值赋值给新图像矩阵中的点,根据对应关系找到原图像中的对应的坐标,这个坐标可能不是整数,这时候找最近的点进行插值。

mjiansun的专栏 3756

分离多通道图像RGB的值

测试成功的代码,我大概花了一个晚上 加上上午的时间的,所以代码很珍贵的,不容易的 望大家能够理解的

资深程序员的Metal入门教程总结

同时,Metal自带的函数都是经过优化的。half 是16bit是浮点数 0.5h float 是32bit的浮点数 0.5f size_t 是64bit的无符号整数 通常用于sizeof的返回值 ptrdiff_t 是64bit的有符号整数 通常用于指针的差值 half2、half3、half4、float2、float3、float4等,是向量类型,表达方式为基础类型+向量维数。threadgroup 指的是设定的处理单元,这个值要根据具体的设备进行区别,但必须是足够小的,能让GPU执行;

yinshipin007的博客 1073

Innovus快捷键大全:从入门到精通的效率提升指南

本文是Innovus快捷键从入门到精通的效率提升指南,旨在帮助芯片后端设计工程师通过掌握核心快捷键,将重复性鼠标操作转化为高效的肌肉记忆,从而显著提升版图设计、编辑和分析的工作流速度。文章系统讲解了视图导航、对象选择编辑、流程管理等关键快捷键组合,并提供了个性化配置与实战策略,助力工程师突破效率瓶颈,实现人机合一的流畅设计体验。

silver的专栏 797

Qt Tab Widget 实战:如何打造一个可动态增删的标签页管理器(附完整代码)

本文深入探讨了使用Qt框架中的Tab Widget控件构建动态标签页管理器的实战方法。通过分析动态增删的核心挑战,提供了完整的C++代码示例,涵盖信号槽机制、页面生命周期管理、上下文菜单实现以及状态持久化等关键功能,帮助开发者打造高效、用户友好的桌面应用界面。

bb456的博客 1042

RGB图像通道值分离、最邻近插值法、双线性插值法

在开始程序编写前,先要理清楚下面几个概念: 1、OpenCV创建图像时,使用的CV_8UC1、CV_32FC3等参数的函数? CV_[bit_depth] (S|U|F) C[number_of_channels] (1) bit_depth  --- 代表一个像素点在内存中所占的bit数 比如CV_8UC1就代表一个像素点在内存中所占的bit数是8,则像素值的取值范围为0~255 (2...

llfjcmx的博客 3069

深入浅出DDR系列(二)--DDR工作原理

学习完了DDR的基本组成和硬件结构原理之后,从整体上了解了DDR的特性和静态图,包括原理、管脚图等。那么本章就要从动态的角度来分析时序结构,包括read/write的整个过程到数据返回发生了什么,其中包括以下内容 DDR是如何完成Read、Write 等的操作 DDR的基本命令 DDR的时序参数 DDR的性能分析 1. DRAM基本组成 对于DRAM,其主要由行和列组成,每一个bit中都是由类似右下图的类晶体管的结构组成,对于sdram的数据,可以通过控制column和row就可以访问sd

奇小葩 3万+

EEG预处理之通道插值(Channel Interpolation)

通道插值是处理多通道生物医学信号的重要技术,通过有效的插值方法,可以修复坏通道,改善数据质量,提高分析的准确性和可靠性。在实际应用中,需要根据具体情况选择合适的插值方法,并注意插值后的数据验证。

GuFrank的博客 1148

gitlib安装、 团队 Git 协作完整教程(企业级标准流程)

最精简的一句话主分支不写代码,每人一条功能分支,每天同步,完成提交合并。

雪的季节 301

06-esp32-idf开发调试方法(内置JTAG,OpenOCD调试)

使用VS Code和ESP-IDF进行ESP32开发和调试 在我们搭建 **IDF** 框架后,**OpenOCD** 已经自动下载好了, 我们通过 **JTAG** 接口连接使用 **OpenOCD** 进行调试。而**ESP32**芯片中内置 了**JTAG** 电路,无需额外芯片即可调试,更加方便,所以这里我们讲解使用模块自带的usb-jtag接口进行调试。

宁子希的博客 1万+

ncnn

1.图像预处理 ncnn::Mat 1.1 from_pixels_resize() 生成目标尺寸大小的网络输入Mat mat_pixel.cpp 双线性插值图像形变 resize_bilinear_c1/c2/c3/4 1通道/2通道/3通道/4通道 图像变形算法 mat_pixel_resize.cpp 像素图像 转换成ncnn::Mat Mat::from_pixels() >>> 不同类型 from_rgb() 像素数据指针rgb间隔 依次赋值给Mat的三个通道的指针

爱CV 1640

Cadence Sigrity PowerDC实战:如何用PCB电热混合仿真解决散热难题(附详细配置步骤)

本文详细介绍了如何利用Cadence Sigrity PowerDC进行PCB电热混合仿真,以解决高功率密度设计中的散热难题。文章通过解析电热耦合原理,并附上详细的配置步骤与实战技巧,指导硬件工程师同步优化电气性能与热管理,从而在设计源头提升产品可靠性与效率。

weixin_29292535的博客 196

PBR贴图转换5——Metalness Workflow 和 Specular Workflow的区别

在继续深入之前我们应该清楚Metalness Workflow和Specular Workflow的基本区别,虽然大多数引擎都会选择支持一种或两种都同时支持。   两种工作流最大的区别在于怎样在贴图中呈现diffuse和refectivity。例如在specular workflow下,这两者由明确区分的两种贴图来呈现。   而metalness workflow下,albedo map

三林博客 2万+

FT601Q芯片深度解析:从USB3.0引脚定义到FPGA FIFO协议实战选型

本文深入解析FT601Q芯片在USB3.0接口设计与FPGA协议栈开发中的应用,详细介绍了USB3.0引脚定义、FT601Q芯片架构、245同步FIFO模式及硬件设计要点,帮助工程师实现高速数据传输系统。

weixin_30607659的博客 447

深度强化Q学习-基于微软AirSim仿真环境的自动驾驶案例(原理代码详解简易可行)

最近在学习《强化学习原理与Python实现》,肖智清著。参考第十二章的自动驾驶案例,写一篇总结,尽量做到简单可行,让有志于自动驾驶的小伙伴可以通过此篇博客可以管中窥豹,初步了解自动驾驶的强化学习训练过程。 本篇将自动驾驶问题转化为回合制的强化学习任务,设计以车辆观察图像和运行状态为输入的自动驾驶算法,并在AirSim仿真环境中进行训练和测试。本篇使用带经验回放和目标网络的基于深度Q网络算法设计并实现智能体,对经验回放、目标网络和深度Q学习算法进行简单介绍,并用代码实现。

shao918516的博客 8599

低复杂度Bayer图像色彩重建算法

摘要:针对Bayer图像色彩重建效果越好的算法需要越多计算量,占用越多硬件资源问题,提出了一种低复杂度的色彩重建算法。首先使用Hamilton-Adam (H-A)算法对Bayer图像进行预插值并求出色差通道,接着通过求出5×5模板内判断插值方向的综合梯度因子,重新更新G通道缺失像元值,最后利用已重建的G通道求出缺失的R和B通道颜色。柯达测试图仿真结果表明,相对于其他算法,所提出的算法在PSNR上

luotong86的专栏 5645

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Feature Map 上采样方法

这里我fluid.layers.interpolate方法使用了image_resize方法进行了平替,因为paddle1.8.4以上之后的版本好像删除了interpolate这个方法,我的版本是2.3的。在右边的等式中的字母f(Q11)、f(Q12)、f(Q21)、f(Q22)、x1、x2、x都是已知的,求出的f(x,y1)与f(x,y2)即为R1、R2的像素值。在右边的等式中的字母y1、y2、y都是已知的,f(x,y1)与f(x,y2)即为上一个式子中求出的R1、R2像素值。

m0_53245772的博客 441

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Metal 着色语言编程指南 十

纹理(Texture)    纹理数据类型是一个指向1, 2 或者3维纹理数据的句柄.   纹理数据则是一个纹理的某个等级(level)的mipmap的全部或者部分数据.    enum class access { sample, read, write }; texture1d texture1d_array texture2d texture2d_array texture3d tex

闲敲棋子落灯花 1708

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

使用Texture2DArray构建GPU Particle

【博物纳新】是UWA旨在为开发者推荐新颖、易用、有趣的开源项目,帮助大家在项目研发之余发现世界上的热门项目、前沿技术或者令人惊叹的视觉效果,并探索将其应用到自己项目的可行性。很多时候,我们并不知道自己想要什么,直到某一天我们遇到了它。 更多精彩内容请关注:lab.uwa4d.com 一、前言 现代图形API支持“纹理数组”,它是具有相同大小和格式纹理的数组。它们被着色器视为单个资源,对它们进...

UWA—简单优化,优化简单! 1478

Pytorch常用的函数(四)深度学习中常见的上采样方法总结

Pytorch常用的函数(四)深度学习中常见的上采样方法总结

qq_44665283的博客 5884

Matlab(双三次插值、单通道变三通道、裁剪图片使得GT图像和inference后的图像大小一致)三段代码

仅供参考,主要是为自己学习使用 一、bicubic双三次插值算法() clear all clc im = {}; %%创建字典im以保存读取的图片 dis = dir('D:\EDSR\dataset\Set14\*.bmp'); b = length(dis) for i = 1:length(dis) path = strcat('D:\EDSR\dataset\Set14\',dis(i).name); im{i} =imread(path); %%将读取到的图像存储在字典...

qq_42785524的博客 2386

几种常见的插值法

线性插值   X = (A + B) / 2 cos插值   X = A * {1 - [1 - cos(X * pi)] / 2} + B *[1 - cos(X * pi)] / 2 三次多项式插值   X = [(B' - B) - (A' - A)] * X^3+ {(A' - A) -[(B' - B) - (A' - A)]} * X^2 +...

weixin_30628077的博客 9364

【图像处理】详解 最近邻插值、线性插值、双线性插值、双三次插值

插值 (Interpolation),通常指内插,既是离散数学名词,也是图像处理术语,二者的联系十分密切。作为图像放缩 (Scale) 的手段,常见的传统插值方法有:最近邻插值 (Nearest Neighbour Interpolation)、线性插值(Linear Interpolation)、双线性插值 (Bilinear Interpolation)、双三次插值 (Bicubic interpolation) 等乃至更高阶的线性插值方法。

闻韶 6万+

基于最小均方误差linear minimum mean square error(LMMSE)插值算法的图像超分辨重构研究-附Matlab代码

本博文主要分析了最小均方误差linear minimum mean square error(LMMSE)插值算法理论,并开展了基于基于最小均方误差linear minimum mean square error(LMMSE)插值算法的图像超分辨重构实验,提供相关的Matlab代码,可私信博主获取该代码,或开展更深的理论推导与实验验证。

m0_70745318的博客 2784

TensorFlow Lite 开发手册(6)——TensorFlow Lite模型使用通用流程(以CPM算法为例)

TensorFLow Lite 开发手册(6)——TensorFlow Lite模型使用通用流程(以CPM算法为例)(一)流程示意(二)主要函数说明(三) 操作流程3.1 CPM算法介绍3.2 加载模型3.3 加载所有tensor3.4 获取输入输出信息3.5 构建输入3.6 调用模型3.7 取出输出结果3.8 输出结果后处理3.8 标记结果3.9 完整程序 (一)流程示意 Created wi...

Friedrich Yuan的博客 3863
上一篇: 用swift+Metal shader文件编译framework动态库
下一篇: 在ncnn上把玩mobileNet
IT修道者
IT修道者 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄17年 326粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值