草庐IT

iOS Cocoa Touch vImage 子采样

coder 2024-01-27 原文

我在 Cocoa Touch 中使用 vImages,在我的例子中,它基本上是 ARGB float 组,我需要进行子采样。低通滤波使用 vImage 函数没有问题,但如何从 2x2 像素中选择一个(假设我想按因子 2 进行子采样)?当然,我可以使用 vDSP 步幅函数,但这仅适用于水平二次采样,不适用于垂直二次采样。

我希望以下内容能够阐明我打算做什么。我希望选择所有标有 X 的像素,如下图所示:

X O X O X O
O O O O O O
X O X O X O
O O O O O O
X O X O X O
O O O O O O

但是由于内存是线性的,所以我的数组看起来是这样的:

X O X O X O O O O O O O X O X O X O O O O O O O X O X O X O O O O O O O

如何以合理的方式进行子采样?

编辑:我正在寻找一种有效的方法来对存储为一维 float 组(包括负值)的给定位图进行二维下采样。<​​>

最佳答案

现实情况是,当您进行这种子采样时,实际上并没有什么可以做的聪明的事情;跨步内存访问不允许使用很多技巧来加快速度,因此您使用的任何库代码本质上都等同于您可能在几分钟内自行编写的 C 代码。我会使用简单的 C 实现。

我相信这可以在 GPU 上相当高效地完成,但除非您的数据已经在 GPU 上下文中,否则这不会是性能上的胜利。如果您必须先将数据传输到那里,那么该成本将抵消实际操作中的任何性能节省。

关于iOS Cocoa Touch vImage 子采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11993468/

有关iOS Cocoa Touch vImage 子采样的更多相关文章

  1. ruby - 随机采样数组的唯一子集 - 2

    如果我有一个数组:a=[1,2,3]如何随机选择数组的子集,使每个子集的元素都是唯一的?也就是说,对于a,可能的子集是:[][1][2][3][1,2][2,3][1,2,3]我无法生成所有可能的子集,因为a的实际大小非常大,所以有很多很多子集。目前,我正在使用“随机游走”的想法——对于a的每个元素,我都会“抛硬币”,如果硬币正面朝上则将其包括在内——但我不确定这是否真的对空间进行了均匀采样。感觉它偏向于中间,但这可能只是我的想法在进行模式匹配,因为会有更多中等大小的可能性。我使用的方法是否正确,或者我应该如何随机抽样?(我知道这更像是一个与语言无关的“数学”问题,但我觉得这不是真正的

  2. ruby - 有效地处理数字数组的 "scale"或 "resize"的算法(音频重采样) - 2

    做音频处理(虽然它也可以是图像处理)我有一个一维数字数组。(它们恰好是代表音频样本的16位有符号整数,这个问题同样适用于float或不同大小的整数。)为了匹配不同频率的音频(例如,将44.1kHz样本与22kHz样本混合),我需要拉伸(stretch)或压缩值数组以满足特定长度。将数组减半很简单:每隔一个样本丢弃一次。[231,8143,16341,2000,-9352,...]=>[231,16341,-9352,...]将数组宽度加倍稍微不那么简单:将每个条目加倍(或可选地在相邻的“真实”样本之间执行一些插值)。[231,8143,16341,2000,-9352,...]=>[2

  3. javascript - 通过采样/插值减少大型数据集的大小以提高图表性能 - 2

    我有一大组(>2000)时间序列数据,我想在浏览器中使用d3显示这些数据。D3非常适合向用户显示数据的一个子集(~100点),但我还想要一个“上下文”View(likethis)来显示整个数据集并允许用户选择作为子区域进行查看细节。但是,当尝试在d3中显示那么多点时,性能很糟糕。我觉得一个好的解决方案是选择一个数据样本,然后使用某种插值(样条、多项式等,这是我知道怎么做的部分)来绘制一条与实际数据。但是,我不清楚应该如何选择子集。数据(如下所示)具有相当平坦的区域,在这些区域需要较少的样本才能进行适当的插值,而其他区域的绝对导数非常高,需要更频繁的采样。更复杂的是,数据存在间隙(生成数

  4. javascript - 将 PCM 音频从 44100 下采样到 8000 - 2

    我从事音频识别演示已有一段时间了,api需要我传递采样率为8000或16000的.wav文件,所以我必须对其进行下采样。我尝试了以下两种算法。虽然他们都没有像我希望的那样解决问题,但结果存在一些差异,我希望这会使它更清楚。这是我的第一次尝试,当sampleRate%outputSampleRate=0时效果很好,但是当outputSampleRate=8000或1600时,结果音频文件是silent(表示输出数组的每个元素的值为0):functioninterleave(inputL){varcompression=sampleRate/outputSampleRate;varleng

  5. windows - 如何获得音频驱动程序的 native 采样率 (Windows) - 2

    我有一个简单的样本混合器,在分析时我注意到大约40-50%的时间花在了重新采样上(44.1=>48kHz,他们必须做一些比lerp更复杂的事情)。当我在48kHz模式下打开播放设备(在我的例子中是DSound)时,这一步就没有了。问题是:有没有办法查询音频驱动程序的默认(native)采样率以避免重采样?我尝试搜索网络/文档但一无所获,我认为这可能是一个简单的API调用。谢谢。 最佳答案 如果您仍然好奇,我也有同样的问题,但找不到答案。有人为我指出了正确的方向,我能够获得一个用于获取播放属性的工作代码示例(Win>=Vista)。您

  6. windows - 如何使用 Windows API 调用平滑地调整图像大小(通过重采样)? - 2

    我需要调整图像大小并对其重新采样,这样它们就不会变成锯齿状(我认为这称为锯齿)。我找到了一些纯VB6代码的代码(抱歉,链接丢失了),但它有点慢(2-5秒),而且我正在实时显示图片,所以我需要更快的东西。我似乎记得看过一些使用GDI+库执行此操作的示例。VB6中的示例将是理想的,但我可能可以使用其他语言的WindowsAPI调用的简单示例。 最佳答案 WIA2.0的缩放过滤器似乎做得不错。Windows®ImageAcquisitionAutomationLibraryv2.0Tool:Imageacquisitionandmanip

  7. windows - 24 位 USB 采样率支持 - 2

    我的问题与这个问题非常相似:Link,但我无权发表评论。我将PIC32实现为声卡,现在我有一个可用的USB音频流,支持16位32kHz和48kHz采样率。我现在想将位深度更改为24位,因此我将USB描述符更改为:bSubFrameSize=0x03,//3bytespersamplebBitResolution=0x18,//24-bitresolution当我执行此操作时,他的位分辨率会按预期更改,但在麦克风的属性中,我可以更改采样频率的下拉菜单是灰色的。我没有更改端点描述符中的任何内容,仍然支持32kHz和48kHz。我的USB拓扑有1个音频控制接口(interface)和几个单元

  8. C++ 将原始音频从 22050 上采样到 48000 Hz - 2

    我有形式的原始音频数据vectorm_shorts;音频数据为22050kHz单声道。有人知道我如何(没有任何第三方库)快速将短vector转换为48000Hz单声道吗?我知道它不会改善声音。这仅用于将音频数据传递给效果(采样率越高听起来越好)。谢谢你的帮助。 最佳答案 如果你想将采样频率从22050Hz加倍到44100Hz(这是22050的两倍)你可以做一些linearinterpolation:vectorm_shorts;vectoroutputs;unsignedinplen=m_shorts.length();output

  9. 基于PCL的RANSAC(随机采样一致)算法简介与示例 - 2

    前言RANSAC(Randomsampleconsensus,随机采样一致)是3D点云拟合的一种重要的手段,可以对直线、圆、平面,圆球、圆柱等形状的点云进行拟合,其优点在于可以最大程度上减少噪声点对拟合效果的影响。一、RANSACRANSAC各种类型拟合的计算原理基本类似。1,进行随机抽样,如直线,就随机找到两个点;如平面,就随机找到三个点来创建一个平面。2,计算除去采样点的其余点与采样点组成的模型之间的距离,设定阈值,将符合阈值标准的点标记为内点,记录内点个数。3,重复前面的步骤进行迭代计算,直到达到迭代终止条件,选择内点个数最多的模型计算最佳拟合参数。其去除噪声影响效果好坏的关键在于内点阈

  10. 关于 【vivado ila debug时 高级触发的使用】之 改变ILA采样频率 - 2

    【vivadoila高级触发的使用】之改变ILA采样频率【vivadoila高级触发的使用】之改变ILA采样频率一.背景二.改变ILA采样频率的解决方法1.利用PLL模块或者自分频产生较低的频率,去作为ILAIP中的采样时钟。2.采用ILA高级设置和VIO实现ILA采样率的自定义设置三.采用ILA高级设置和VIO实现ILA采样率的步骤四.总结一.背景通常情况下,FPGA工程师在设计完复杂的逻辑设计后,会进行初步的仿真测试,仿真测试之后进行上板测试,但是简单的仿真往往无以应对复杂的实际情况,上板使用在线调试工具(ILA和VIO)抓取内部信号进行debug是常用的调试方式,一般,ILA的采样频率会

随机推荐