小编Ang*_*bes的帖子

使用IOS Accelerate Framework在非二次幂图像上进行二维信号处理?

//编辑...

我正在编辑我的问题,以解决专门处理非二次幂图像的问题.我有一个基本结构,适用于尺寸为256x256或1024x1024的方形灰度图像,但无法看到如何推广到任意大小的图像.fft函数似乎希望你包含宽度和高度的log2,但是它不清楚如何解压缩结果数据,或者数据是否只是被扰乱.我认为显而易见的事情是将npot图像置于较大的全黑图像中,然后在查看数据时忽略这些位置中的任何值.但是想知道是否有一种不太笨拙的方法来处理npot数据.

//...END编辑

我在使用Accelerate Framework文档时遇到了一些麻烦.我通常会使用FFTW3,但是我无法在实际的IOS设备上进行编译(请参阅此问题).任何人都可以指向使用Accelerate的超级简单实现,它执行如下操作:

1)将图像数据转换为适当的数据结构,可以传递给Accelerate的FFT方法.
在FFTW3中,最简单的是,使用灰度图像,这涉及将无符号字节放入"fftw_complex"数组中,该数组只是两个浮点数的结构,一个包含实数值,另一个包含虚数(和虚数在哪里)每个像素初始化为零).

2)采用该数据结构并对其执行FFT.

3)打印出幅度和相位.

4)对其执行IFFT.

5)根据IFFT产生的数据重新创建原始图像.

虽然这是一个非常基本的例子,但我在使用Apple网站上的文档时遇到了麻烦.Pi的SO 答案非常有用,但我仍然对如何使用Accelerate使用灰度(或彩色)2D图像执行此基本功能感到困惑.

无论如何,任何指针或特别是一些处理2D图像的简单工作代码都会非常有用!

编辑\\\

好的,花了一些时间深入研究文档和SO上的一些非常有用的代码以及pkmital的github repo,我有一些工作代码,我以为我会发布自1)我花了一段时间来计算它和2)因为我有几个剩下的问题......

初始化FFT"计划".假设一个方形的二次幂图像:

#include <Accelerate/Accelerate.h>
...
UInt32 N = log2(length*length);
UInt32 log2nr = N / 2; 
UInt32 log2nc = N / 2;
UInt32 numElements = 1 << ( log2nr + log2nc );
float SCALE = 1.0/numElements;
SInt32 rowStride = 1; 
SInt32 columnStride = 0;
FFTSetup setup = create_fftsetup(MAX(log2nr, log2nc), FFT_RADIX2);
Run Code Online (Sandbox Code Playgroud)

传入一个字节数组,用于方形二次灰度图像并将其转换为COMPLEX_SPLIT:

COMPLEX_SPLIT in_fft;
in_fft.realp = ( float* ) …
Run Code Online (Sandbox Code Playgroud)

signal-processing fft ios vdsp

13
推荐指数
1
解决办法
1872
查看次数

iPad/iPhone上的OpenGL ES 2.0到视频

尽管StackOverflow上有很好的信息,但我仍然在这里尽力而为......

我正在尝试将OpenGL渲染缓冲区写入iPad 2上的视频(使用iOS 4.3).这正是我正在尝试的:

A)设置AVAssetWriterInputPixelBufferAdaptor

  1. 创建一个指向视频文件的AVAssetWriter

  2. 使用适当的设置设置AVAssetWriterInput

  3. 设置AVAssetWriterInputPixelBufferAdaptor以将数据添加到视频文件中

B)使用该AVAssetWriterInputPixelBufferAdaptor将数据写入视频文件

  1. 将OpenGL代码渲染到屏幕上

  2. 通过glReadPixels获取OpenGL缓冲区

  3. 从OpenGL数据创建CVPixelBufferRef

  4. 使用appendPixelBuffer方法将PixelBuffer附加到AVAssetWriterInputPixelBufferAdaptor

但是,我遇到了这个问题.我现在的策略是在按下按钮时设置AVAssetWriterInputPixelBufferAdaptor.一旦AVAssetWriterInputPixelBufferAdaptor有效,我设置一个标志来通知EAGLView创建一个像素缓冲区,并通过appendPixelBuffer将它附加到视频文件中给定数量的帧.

现在我的代码崩溃,因为它试图附加第二个像素缓冲区,给我以下错误:

-[__NSCFDictionary appendPixelBuffer:withPresentationTime:]: unrecognized selector sent to instance 0x131db0
Run Code Online (Sandbox Code Playgroud)

这是我的AVAsset设置代码(很多是基于Rudy Aramayo的代码,它可以在普通图像工作,但不是为纹理设置的):

- (void) testVideoWriter {

  //initialize global info
  MOVIE_NAME = @"Documents/Movie.mov";
  CGSize size = CGSizeMake(480, 320);
  frameLength = CMTimeMake(1, 5); 
  currentTime = kCMTimeZero;
  currentFrame = 0;

  NSString *MOVIE_PATH = [NSHomeDirectory() stringByAppendingPathComponent:MOVIE_NAME];
  NSError *error = nil;

  unlink([betaCompressionDirectory UTF8String]);

  videoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:betaCompressionDirectory] fileType:AVFileTypeQuickTimeMovie error:&error];

  NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:AVVideoCodecH264, AVVideoCodecKey,
                                 [NSNumber numberWithInt:size.width], AVVideoWidthKey, …
Run Code Online (Sandbox Code Playgroud)

video ios xcode4 avassetwriter opengl-es-2.0

9
推荐指数
1
解决办法
9478
查看次数

如何在支持Cocoa/XCode的情况下为OSX 10.8安装VTK 6.1?

http://www.vtk.org/Wiki/Cocoa_VTK上发布的非常有用的指南以及由VTK回购中的Sean McBride和Mike Jackson 发布的自述文件对于VTK 6.1来说已经过时了.所以,如果这有助于任何人,我发布了在OSX 10.8上安装VTK 6.1的说明,并支持SimpleCocoaVTK Xcode项目.

macos vtk

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

标签 统计

ios ×2

avassetwriter ×1

fft ×1

macos ×1

opengl-es-2.0 ×1

signal-processing ×1

vdsp ×1

video ×1

vtk ×1

xcode4 ×1