标签: downsampling

如何正确下采样图像?

背景

创建一个具有大量高质量图像的应用程序,我决定将图像缩小到所需的大小(这意味着如果图像大于屏幕,我会缩小它的尺寸).

问题

我注意到在某些设备上,如果图像缩小,它们变得模糊/像素化,但在同一设备上,对于相同的目标imageView大小,如果图像没有缩小尺寸,它们看起来很好.

我试过的

我已经决定进一步检查这个问题,并创建了一个显示问题的小型POC应用程序.

在向您展示代码之前,这里是我正在谈论的演示:

在此输入图像描述

看到差异有点难,但你可以看到第二个有点像素化.这可以在任何图像上显示.

public class MainActivity extends Activity
  {
  @Override
  protected void onCreate(final Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final ImageView originalImageView=(ImageView)findViewById(R.id.originalImageView);
    final ImageView halvedImageView=(ImageView)findViewById(R.id.halvedImageView);
    final ImageView halvedBitmapImageView=(ImageView)findViewById(R.id.halvedBitmapImageView);
    //
    final Bitmap originalBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test);
    originalImageView.setImageBitmap(originalBitmap);
    halvedImageView.setImageBitmap(originalBitmap);
    //
    final LayoutParams layoutParams=halvedImageView.getLayoutParams();
    layoutParams.width=originalBitmap.getWidth()/2;
    layoutParams.height=originalBitmap.getHeight()/2;
    halvedImageView.setLayoutParams(layoutParams);
    //
    final Options options=new Options();
    options.inSampleSize=2;
    // options.inDither=true; //didn't help
    // options.inPreferQualityOverSpeed=true; //didn't help
    final Bitmap bitmap=BitmapFactory.decodeResource(getResources(),R.drawable.test,options);
    halvedBitmapImageView.setImageBitmap(bitmap);
    }
  }
Run Code Online (Sandbox Code Playgroud)

XML:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
  android:layout_height="match_parent" tools:context=".MainActivity"
  android:fillViewport="true">
  <HorizontalScrollView android:layout_width="match_parent"
    android:fillViewport="true" android:layout_height="match_parent">
    <LinearLayout android:layout_width="match_parent"
      android:layout_height="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android decode bitmap downsampling pixelate

14
推荐指数
1
解决办法
2万
查看次数

下采样并将低通滤波器应用于数字音频

我有一张来自CD的44Khz音频流,表示为16位PCM采样数组.我想把它切成11KHz的流.我怎么做?从我多年前的工程课时代开始,我就知道流不再能够准确地描述超过5500Hz的任何东西,所以我想我也想把所有东西都切掉.有任何想法吗?谢谢.

更新:此页面上有一些代码,使用简单的算法和看起来像{1,4,12,12,4,1}的系数数组,从48KHz转换为8KHz.我认为这就是我所需要的,但我需要的是4倍而不是6倍.知道如何计算这些常数吗?此外,我最终将16字节样本转换为浮点数,因此我可以使用浮点数而不是短点进行下采样,如果这有助于提高质量.

audio signal-processing downsampling pcm

13
推荐指数
3
解决办法
2万
查看次数

Python - 下采样wav音频文件

我必须在不使用任何外部python库的情况下将wav文件从44100Hz下采样到16000Hz,因此最好wave和/或audioop.我尝试使用setframerate函数将wav文件帧速率更改为16000 但这只会减慢整个录制速度.如何将音频文件下采样到16kHz并保持相同的音频长度?

非常感谢你提前

python audio wav downsampling wave

11
推荐指数
5
解决办法
2万
查看次数

iOS AudioUnit以8kHz采样率录制,静音

我正在构建一个voip应用程序,我们需要从麦克风录制音频并以8kHz采样率发送到某处.现在我以默认采样率录制它,在我的情况下总是为44,4k.然后使用此算法将其手动转换为8k .

这种天真的方法产生了"正常"的质量,但我认为使用AudioUnit的原生下采样功能会好得多.

但是当我更改录音AudioUnit上的采样率属性时,它只输出静音帧(~0.0),我不知道为什么.

我已经提取了负责声音的应用程序部分.它应该从麦克风录制 - >写入环形缓冲区 - >播放缓冲区中的数据:

RecordingUnit:

import Foundation
import AudioToolbox
import AVFoundation

class RecordingUnit : NSObject
{
    public static let AudioPacketDataSize = 160
    public static var instance: RecordingUnit!
    public var micBuffers : AudioBufferList?;
    public var OutputBuffer = RingBuffer<Float>(count: 1 * 1000 * AudioPacketDataSize);

    public var currentAudioUnit: AudioUnit?

    override init()
    {
        super.init()
        RecordingUnit.instance = self

        micBuffers = AudioBufferList(
            mNumberBuffers: 1,
            mBuffers: AudioBuffer(
                mNumberChannels: UInt32(1),
                mDataByteSize: UInt32(1024),
                mData: UnsafeMutableRawPointer.allocate(byteCount: 1024, alignment: 1)))
    }

    public func start() …
Run Code Online (Sandbox Code Playgroud)

audio downsampling audiounit ios swift

11
推荐指数
0
解决办法
321
查看次数

如何在MATLAB中对矩阵进行采样?

我在MATLAB中有一个矩阵,我想从中获取每个其他条目:

a =

     1     5     9    13
     2     6    10    14
     3     7    11    15
     4     8    12    16
Run Code Online (Sandbox Code Playgroud)

而且我要:

result =

     1     9    
     3    11    
Run Code Online (Sandbox Code Playgroud)

如果没有for循环,我怎么能这样做?

matlab matrix downsampling

7
推荐指数
2
解决办法
1万
查看次数

下采样列表中的条目数(不进行插值)

我有一个包含许多条目的Python列表,我需要使用以下任一项进行缩减采样:

  • 最大行数.例如,将1234个条目的列表限制为1000.
  • 原始行的一部分.例如,使列表的原始长度为1/3.

(我需要能够做到两种方式,但一次只能使用一种方式).

我相信,对于最大行数,我可以计算所需的比例并将其传递给比例缩减器:

def downsample_to_max(self, rows, max_rows):
        return downsample_to_proportion(rows, max_rows / float(len(rows)))
Run Code Online (Sandbox Code Playgroud)

...所以我真的只需要一个下采样功能.有什么提示吗?

编辑:列表包含对象,而不是数值,所以我不需要插值.丢弃对象很好.

解:

def downsample_to_proportion(self, rows, proportion):

    counter = 0.0
    last_counter = None
    results = []

    for row in rows:

        counter += proportion

        if int(counter) != last_counter:
            results.append(row)
            last_counter = int(counter)

    return results
Run Code Online (Sandbox Code Playgroud)

谢谢.

python list downsampling

7
推荐指数
2
解决办法
3825
查看次数

将PCM音频从44100下采样到8000

我一直在研究音频识别演示,而api需要我传递一个800016000的采样率的.wav文件,所以我必须对它进行下采样.我尝试了2种算法如下.虽然它们都没有按我的意愿解决问题,但结果存在一些差异,我希望这会使它更加清晰.

这是我的第一次尝试,当sampleRate%outputSampleRate = 0时它工作正常,但是当outputSampleRate = 8000或1600时,结果音频文件是静默的(这意味着输出数组的每个元素的值为0):

function interleave(inputL){
  var compression = sampleRate / outputSampleRate;
  var length = inputL.length / compression;
  var result = new Float32Array(length);

  var index = 0,
  inputIndex = 0;

  while (index < length){
    result[index++] = inputL[inputIndex];
    inputIndex += compression;
  }
  return result;
}
Run Code Online (Sandbox Code Playgroud)

所以这是我的第二次尝试,它来自一家大公司,它也不起作用.更重要的是,当我设置sampleRate%outputSampleRate = 0时,它仍然输出一个静默文件:

function interleave(e){
  var t = e.length;
  var n = new Float32Array(t),
    r = 0,
    i;
  for (i …
Run Code Online (Sandbox Code Playgroud)

javascript audio downsampling pcm

7
推荐指数
1
解决办法
4681
查看次数

使用哪个 pcl 滤波器对点云进行下采样

我从自动驾驶机器人上的激光雷达获取点云,但数据量太大,无法处理。

我已经实现了直通过滤器。

我确实得到了非常好的结果,我问自己是否还有其他过滤器或方法可以挖掘。

当然,我并不是在寻找任何具体的东西,而是在寻找方向或建议,因为我对 pcl 库还很陌生,而且它看起来相当庞大。

现在这是我的过滤器:

pcl::PointCloud<PointXYZIR>::Ptr cloudInput;

cloudInput.reset(new pcl::PointCloud<PointXYZIR> (cloud_in));

pcl::PointCloud<PointXYZIR>::Ptr cloudFiltered;
cloudFiltered.reset(new pcl::PointCloud<PointXYZIR>);

// Create the filtering object: downsample the dataset using a leaf size
pcl::VoxelGrid<PointXYZIR> avg;
avg.setInputCloud(cloudInput);
avg.setLeafSize(0.25f, 0.25f, 0.25f);
avg.filter(*cloudFiltered);

//Filter object
pcl::PassThrough<PointXYZIR> filter;
filter.setInputCloud(cloudFiltered);

filter.setFilterFieldName("x");
filter.setFilterLimits(-100, 100);
filter.filter(*cloudFiltered);

filter.setFilterFieldName("y");
filter.setFilterLimits(-100, 100);
filter.filter(*cloudFiltered);

cloud_out = *cloudFiltered;
Run Code Online (Sandbox Code Playgroud)

c++ downsampling point-clouds point-cloud-library

6
推荐指数
1
解决办法
1万
查看次数

下采样时间序列:平均与最大三角形三桶

我正在使用浮点图来编程折线图来显示时间序列。

为了减少要显示的点数,我通过对同一小时内的每个数据点应用平均函数来进行下采样。

然而最近,我发现了最大三角三桶算法: http://flot.base.is/

  1. 使用这种算法与使用平均值(每分钟、每小时、每天……)等简单函数有什么区别?

  2. 为了加速长时间查询,在服务器端预先计算一个sql表,通过对每个月的数据应用LTTB,并让客户端对聚合数据应用另一个LTTB,是否有意义?

javascript average graph flot downsampling

6
推荐指数
1
解决办法
5203
查看次数

如何对一维 numpy 数组进行下采样?

这似乎是一个非常直接的问题,但我想不出解决方案。假设我有一个y包含 8000 个样本的正弦函数:

import numpy as np

Fs = 8000
f = 1
npts = 8000
x = np.arange(npts)
y = np.sin(2 * np.pi * f * x / Fs)
Run Code Online (Sandbox Code Playgroud)

我想将这个函数下采样到 6000 个样本,所以我尝试了这个回答类似问题的方法......

import math
from scipy import nanmean

#number of samples I want to downsample to
npts2 = 6000

#calculating the number of NaN values to pad to the array
n = math.ceil(float(y.size)/npts2)
pad_size = n*npts2 - len(y)
padded = np.append(y, np.zeros(int(pad_size))*np.NaN)

#downsampling the reshaped …
Run Code Online (Sandbox Code Playgroud)

python numpy downsampling

6
推荐指数
1
解决办法
7851
查看次数