CIDepthBlurEffect, появляются странные вертикальные линии - PullRequest
0 голосов
/ 25 декабря 2018

Мне удалось создать эффект фокуса самостоятельно, но я обнаружил другую проблему.Каждый раз, когда я отрисовываю фотографии с глубиной с помощью CIDepthBlurEffect, появляются странные вертикальные линии, такие как:

enter image description here

Они всегда появляются в одном и том же месте, сверхуфото.

Знаете как это решить?Пожалуйста, дайте мне вашу идею.

Редактировать: Я оставляю код, с которым у меня есть проблема.Извините за грязный код.

глубина фото

//getting depth data
func getdepth(with data: Data, guide: CIImage) -> CIImage?{

let processedimage = CIImage(data: data, options: [
  CIImageOption.nearestSampling: false,
  CIImageOption.auxiliaryDisparity: true,
  //CIImageOption.auxiliaryDepth: true,
  CIImageOption.applyOrientationProperty: true
  ])

if let depth = processedimage?.upsample(guide: guide){
  return depth
}

return processedimage
}

//upsample

extension CIImage{

  func upsample(guide: CIImage) -> CIImage?{

    //let trans = CGAffineTransform(scaleX: self.extent.width /     guide.extent.width, y: self.extent.height / guide.extent.height)

   //let guider = guide.transformed(by: trans)

   guard let filter = CIFilter(name: "CIEdgePreserveUpsampleFilter") else { return nil }
 filter.setValue(self, forKey: "inputSmallImage")
 filter.setValue(guide, forKey: kCIInputImageKey)

 return filter.outputImage

  }
}

//main image

guard let image = CIImage(data: data, options:
  [CIImageOption.applyOrientationProperty: true]
  ) else { return }



//input variable: main: CIImage, depth: CIImage, matte: CIImage?

let transform = CGAffineTransform(
  scaleX: main.extent.width / combined.extent.width,
  y: main.extent.height / combined.extent.height
)

let depthscaled = depth.transformed(by: transform)

var applyingdepth: CIFilter!

if let mat = matte{

  if #available(iOS 12.0, *) {
    applyingdepth = CIFilter(name: "CIDepthBlurEffect", parameters: [
      kCIInputImageKey: main,
      kCIInputDisparityImageKey: depthscaled,
      kCIInputMatteImageKey: mat

      ])!

  }
}else {

  applyingdepth = CIFilter(name: "CIDepthBlurEffect", parameters: [
    kCIInputImageKey: main,
    kCIInputDisparityImageKey: depthscaled

    ])!

}

applyingdepth.setValue(1.4, forKey: "inputAperture")

return applying depth.output // this is "portraitimage"

//outside of this block
 guard let portrait = context.createCGImage(portraitimage, from: portraitimage.extent) else { return }

  UIImageWriteToSavedPhotosAlbum(UIImage(cgImage: portrait), nil, nil, nil)
...