iPhone 응용 프로그램에 표시 할 UIImage에 "자동 레벨"옵션을 구현하고 싶습니다. 내가 직접 구현하려고하기 전에 히스토그램 등을 사용해야하는 API에 이미지 처리 메소드가 있는지 궁금 해서요. 아니면 기본 CGImage를 잡고 처리해야합니까?UIImage - 자동 레벨 알고리즘 구현
감사
MV 나는 이미지 프로세싱을 기존의 API가 있다고 생각하지 않습니다
iPhone 응용 프로그램에 표시 할 UIImage에 "자동 레벨"옵션을 구현하고 싶습니다. 내가 직접 구현하려고하기 전에 히스토그램 등을 사용해야하는 API에 이미지 처리 메소드가 있는지 궁금 해서요. 아니면 기본 CGImage를 잡고 처리해야합니까?UIImage - 자동 레벨 알고리즘 구현
감사
MV 나는 이미지 프로세싱을 기존의 API가 있다고 생각하지 않습니다
한 매우 쉬운 방법은 CGImageRef의 디코드 어레이를 사용하지만, 이것은 단지 범위 매핑 (NO 감마 등)의 도움을 줄 수있다
화이트 포인트 0.0 사이 플로트가const CGFloat decode[6] = {blackPoint,whitePoint,blackPoint,whitePoint,blackPoint,whitePoint};
decodedImage = CGImageCreate(CGImageGetWidth(origImage),
CGImageGetHeight(origImage),
CGImageGetBitsPerComponent(origImage),
CGImageGetBitsPerPixel(origImage),
CGImageGetBytesPerRow(origImage),
CGImageGetColorSpace(origImage),
CGImageGetBitmapInfo(origImage),
CGImageGetDataProvider(origImage),
decode,
YES,
CGImageGetRenderingIntent(origImage)
);
1.0은 출력에서 순수한 흰색에 매핑 할 밝기를 결정하고 blackPoint는 순수한 검정에 매핑되는 밝기를 결정하는 부동 소수점입니다.
디코드 배열의 요소는 색상 공간의 구성 요소에 해당하므로이 코드는 RBG 이미지에서만 작동합니다. 구성 요소를 다른 흰색과 검은 색 값으로 설정하여 간단한 색상 보정을 만들 수 있습니다.
당신은 화이트 포인트와 (색상 보정 O/w) 다음과 같은 기능을 가진 blackPoint을 계산할 수 있습니다 : 당신은 CImg 라이브러리를 시도 할 수
void CalculateAutocorretionValues(CGImageRef image, CGFloat *whitePoint, CGFloat *blackPoint) {
UInt8* imageData = malloc(100 * 100 * 4);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef ctx = CGBitmapContextCreate(imageData, 100, 100, 8, 4 * 100, colorSpace, kCGImageAlphaNoneSkipLast);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(ctx, CGRectMake(0, 0, 100, 100), image);
int histogramm[256];
bzero(histogramm, 256 * sizeof(int));
for (int i = 0; i < 100 * 100 * 4; i += 4) {
UInt8 value = (imageData[i] + imageData[i+1] + imageData[i+2])/3;
histogramm[value]++;
}
CGContextRelease(ctx);
free(imageData);
int black = 0;
int counter = 0;
// count up to 200 (2%) values from the black side of the histogramm to find the black point
while ((counter < 200) && (black < 256)) {
counter += histogramm[black];
black ++;
}
int white = 255;
counter = 0;
// count up to 200 (2%) values from the white side of the histogramm to find the white point
while ((counter < 200) && (white > 0)) {
counter += histogramm[white];
white --;
}
*blackPoint = 0.0 - (black/256.0);
*whitePoint = 1.0 + ((255-white)/256.0);
}
(I은. 아이폰 dev에 새로운 오전),하지만 난 타사 라이브러리 거기 밖으로 확신 해요 .
이 설명 자동 수준 (즉, 히스토그램 평활화) 정말 잘은 :
http://www.generation5.org/content/2004/histogramEqualization.asp
또한 같은 자바 구현이있다.
음, 자동 레벨이란 무엇입니까? – vodkhang
"자동 레벨"은 Photoshop과 같은 대부분의 이미지 편집 프로그램에서 이미지의 색조 범위를 향상시키는 옵션입니다. –
유망 해 보입니다. http://code.google.com/p/simple-iphone-image-processing/ –