Sto cercando di utilizzare GPUImagePoissonBlendFilter del framework GPUImage per unire due facce nella mia applicazione di fusione del viso. Ecco il mio codice.Fusione utilizzando GPUImagePoissonBlendFilter
- (void)applyPoissonBlendToImage:(UIImage *) rearFace withImage:(UIImage *) frontFace
{
GPUImagePicture* picture1 = [[GPUImagePicture alloc] initWithImage:rearFace];
GPUImagePicture* picture2 = [[GPUImagePicture alloc] initWithImage:frontFace];
GPUImagePoissonBlendFilter * poissonFilter = [[GPUImagePoissonBlendFilter alloc] init];
poissonFilter.mix = .7;
poissonFilter.numIterations = 200;
[picture1 addTarget:poissonFilter];
[picture1 processImage];
[picture2 addTarget:poissonFilter];
[picture2 processImage];
finalResultImage = [poissonFilter imageFromCurrentlyProcessedOutputWithOrientation:rearFace.imageOrientation];
}
cioè Come potete vedere, sto dando due immagini (rearFace e FrontFace) come input per questo metodo. La faccia anteriore dell'immagine è una forma (forma poligonale formata dall'unione delle relative posizioni dell'occhio e della bocca) ed è della stessa dimensione dell'immagine del reticolo posteriore i .e (Per abbinare la dimensione, ho riempito lo spazio esterno alla forma poligonale con colore trasparente mentre si disegna).
Tuttavia la miscelazione non si verifica come mi aspettavo. vale a dire che i bordi affilati della faccia anteriore non sono miscelati correttamente nella parte posteriore. Qui la mia ipotesi è che il PoissonBlendFilter inizi a fondere la seconda immagine dal suo angolo in alto a sinistra piuttosto che dal bordo in alto a sinistra della faccia.
Problema: Sento che l'immagine di ingresso non è stata inserita correttamente nel filtro. Devo applicare un qualche tipo di mascheramento all'immagine di input? Qualcuno può guidarmi in questo?