是否可以通过Core Image处理(过滤)HDR图像?我找不到这方面的文件,所以我想知道是否有人可能有答案.我知道RGBAh在初始化a时可以进行工作空间计算CIContext,所以我认为如果我们可以用浮点图像格式进行计算,那么它应该是可能的..
如果你想在iOS上制作HDR效果,那么如果不可能的话,会有什么选择呢?
编辑:我想我会尝试更简洁一点.据我所知,通过钳制像素值,可以将HDR图像钳制并保存为.jpg,.png和其他图像格式.但是,我更感兴趣的是在尚未转换的HDR图像上通过Core Image进行色调映射.问题是使用HDR图像对CIImage进行编码,假设是.hdr扩展.
EDIT2:使用它可能会有CGImageCreate用CGDataProviderCreateWithFilename吗?
介绍
我有兴趣编写一个函数,为我输出高斯金字塔中的下一个级别(我最终想要创建一个拉普拉斯金字塔)用于图像处理.(参考链接https://en.wikipedia.org/wiki/Pyramid_(image_processing)#Gaussian_pyramid)
下采样问题
现在,最简单的部分就是当您进行向下/向上采样时,在调整大小之前,将5抽头过滤器与图像进行对比.
然而,关于制作图像金字塔的有趣部分是,您必须对图像进行下采样和上采样0.5或2倍,具体取决于您要去的方向.Swift有几种方法可以做到这一点,比如使用CIAffineTransform和CILanczosTransform,但是我想知道是否有办法更天真地做这件事,因为我不关心调整大小的图像的质量.对于这篇文章,我将以Lenna(512x512)为例,如下所示:
如果我们想要将图像下采样两倍,我们将采用所有奇数编号的像素数据来形成新图像.在MATLAB中,执行如下(在高斯模糊之后):
如果I是您的输入图像并且大小为NxM,为P(512x512x3矩阵)存储了3种颜色映射,那么缩放图像的缩放比例为.5
R = I(1:2:end, 1:2:end,:)
所有新图像都是前一个图像的奇数编号的列和行.这产生以下,256x256照片,这是高斯金字塔的第一级:
swift中存在这样的事情吗?它是可行的Core Image,还是OpenGL自定义过滤器?
上采样问题:
上采样实际上仅在创建拉普拉斯金字塔时使用.然而,这样做的天真想法是做以下事情:
初始化R,您要上采样的大小的空白图像上下文.在这种情况下,我们将对上采样的Lenna照片进行上采样,如上图所示,因此R必须是512x512的空白图像.
接下来,将下采样图像的像素值乘以I4.这可以通过将图像与3×3矩阵卷积来快速完成[0,0,0;0,4,0;0,0,0].然后,可以将图像的像素均匀地分布到较大的空白图像中R.这看起来像:
最后,可以在此图像上使用相同的5抽头高斯模糊来恢复上采样图像:
我想知道是否可以在swift中采用类似的上采样方法.
我不确定的另一件事是,对于为高斯/拉普拉斯滤波调整图像大小的技术真的很重要.如果没有,那么我当然可以使用最快的内置方法而不是试图制作自己的方法.
我正在为macOS中的一个小程序编写一些代码,以使用Metal Performance Shaders进行图像处理。由于某种原因,下面的代码生成的图像看起来比原始图像要暗得多。
该代码仅获取纹理,对其执行一点高斯模糊,然后将图像输出到MTKView。不过,我无法弄清楚为什么最终的图像太暗。
import Cocoa
import Metal
import MetalKit
import CoreGraphics
import MetalPerformanceShaders
class ViewController: NSViewController, MTKViewDelegate {
@IBOutlet weak var imageView: MTKView!
override func viewDidLoad() {
super.viewDidLoad()
//Setup the Metal Pipeline
let device = MTLCreateSystemDefaultDevice()!
imageView.device = device
imageView.framebufferOnly = false
imageView.isPaused = true
let commandQueue = device.makeCommandQueue()!
let commandBuffer = commandQueue.makeCommandBuffer()!
let gaussian = MPSImageGaussianBlur(device: device, sigma: 2)
let data = imageData(name:"sample", type:"jpg")
let inputTexture = try! MTKTextureLoader(device: device).newTexture(data: data, options: nil)
gaussian.encode(commandBuffer: commandBuffer, sourceTexture: inputTexture, destinationTexture: …Run Code Online (Sandbox Code Playgroud) 我想使用MPSImageGaussianPyramid但对 Metal 的用法和 mipmap 非常陌生。我想使用过滤器为图像处理技术生成图像金字塔。
根据我能够收集的内容,MPSImageGaussianPyramid创建了一个 mipmapped 图像,但是在我的代码中,我什至很难确保我正确地看到了输出。是否有正确使用此过滤器的示例?我的问题是:
应用过滤器后如何访问 mipmap 图像?
是否可以将 mipmapped 图像复制到另一个图像进行处理?
这个 mipmapped 图像会比通过自定义过滤器手动创建金字塔更快吗?
谢谢,稍后我将提供一些我无法开始工作的示例代码。