title: iOS Face detection transformation
body: <p>I have followed a tutorial to detect a face within an image, it works. It creates a red rectangle around the face by making a <code>UIView *faceView</code>. Now i am trying to obtain the coordinates of the face detected however the results returned are off slightly in the y-axis. How can i fix this? where am i going wrong. </p>
  
  <p>This is what i have attempted : </p>
  
  <pre><code>CGRect newBounds = CGRectMake(faceFeature.bounds.origin.x, 
                                imageView.bounds.size.height - faceFeature.bounds.origin.y - faceFeature.bounds.size.height,
                                faceFeature.bounds.size.width, 
                                faceFeature.bounds.size.height);
  </code></pre>
  
  <p>This is the source code for the detection : </p>
  
  <p>-</p>
  
  <pre><code>(void)markFaces:(UIImageView *)facePicture
  {
      // draw a CI image with the previously loaded face detection picture
      CIImage* image = [CIImage imageWithCGImage:facePicture.image.CGImage];
  
      // create a face detector - since speed is not an issue we'll use a high accuracy
      // detector
      CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace 
                                                context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]];
  
      // create an array containing all the detected faces from the detector    
      NSArray* features = [detector featuresInImage:image];
  
      // we'll iterate through every detected face.  CIFaceFeature provides us
      // with the width for the entire face, and the coordinates of each eye
      // and the mouth if detected.  Also provided are BOOL's for the eye's and
      // mouth so we can check if they already exist.
      for(CIFaceFeature* faceFeature in features)
      {
          // get the width of the face
          CGFloat faceWidth = faceFeature.bounds.size.width;
  
          // create a UIView using the bounds of the face
          UIView* faceView = [[UIView alloc] initWithFrame:faceFeature.bounds];
  
          // add a border around the newly created UIView
          faceView.layer.borderWidth = 1;
          faceView.layer.borderColor = [[UIColor redColor] CGColor];
  
  
          CGRect newBounds = CGRectMake(faceFeature.bounds.origin.x, 
                                        imageView.bounds.size.height - faceFeature.bounds.origin.y - faceFeature.bounds.size.height,
                                        faceFeature.bounds.size.width, 
                                        faceFeature.bounds.size.height);
  
  
  
  
  
          NSLog(@"My view frame: %@", NSStringFromCGRect(newBounds));
  
          [self.view addSubview:faceView];
  
          if(faceFeature.hasLeftEyePosition)
          {
          }
  
          if(faceFeature.hasRightEyePosition)
          {
          }
  
          if(faceFeature.hasMouthPosition)
          {
          }
      }
  }
  
  -(void)faceDetector
  {
      // Load the picture for face detection
      UIImageView* image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"jolie.jpg"]];
  
      // Draw the face detection image
      [self.view addSubview:image];
  
      // flip image on y-axis to match coordinate system used by core image
      [image setTransform:CGAffineTransformMakeScale(1, -1)];
  
      // flip the entire window to make everything right side up
      [self.view setTransform:CGAffineTransformMakeScale(1, -1)];
  
      // Execute the method used to markFaces in background
      [self performSelectorInBackground:@selector(markFaces:) withObject:image];
  }
  </code></pre>