【发布时间】:2013-12-19 12:25:28
【问题描述】:
CIMedianFilter 是如何工作的?我的意思是它的算法,我想要它来消除噪音,我试着用这个代码来做:
// -------------------------- W O R K I N G O N R E D -----------------
// red pixels
NSNumber *red1 = [NSNumber numberWithInt:rgbaPixel1[3]];
NSNumber *red2 = [NSNumber numberWithInt:rgbaPixel2[3]];
NSNumber *red3 = [NSNumber numberWithInt:rgbaPixel3[3]];
NSNumber *red4 = [NSNumber numberWithInt:rgbaPixel4[3]];
NSNumber *red5 = [NSNumber numberWithInt:rgbaPixel5[3]];
// red array
NSMutableArray *redArray = [NSMutableArray arrayWithObjects:red1, red2, red3, red4, red5, nil];
// sorting
NSSortDescriptor *lowToHigh = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
[redArray sortUsingDescriptors:[NSArray arrayWithObject:lowToHigh]];
// getting median
int redMedian = [[redArray objectAtIndex:2] intValue];
// setting the pixels red value to the median
rgbaPixel1[3] = redMedian;
/////////////////////////////////testing if sorting and median is true
// NSLog(@"Sir, here's a test (%@, %@, %@, %@, %@) and the median is %i", [redArray objectAtIndex:0],
// [redArray objectAtIndex:1],
// [redArray objectAtIndex:2],
// [redArray objectAtIndex:3], [redArray objectAtIndex:4], shit);
// ---------------------------- E N D O F R E D ------------------------
// ----------------------------- W O R K I N G O N G R E E N ---------------
// getting green pixels first
NSNumber *green1 = [NSNumber numberWithInteger:rgbaPixel1[2]];
NSNumber *green2 = [NSNumber numberWithInteger:rgbaPixel2[2]];
NSNumber *green3 = [NSNumber numberWithInteger:rgbaPixel3[2]];
NSNumber *green4 = [NSNumber numberWithInteger:rgbaPixel4[2]];
NSNumber *green5 = [NSNumber numberWithInteger:rgbaPixel5[2]];
// creating array of greens
NSMutableArray *greenArray = [NSMutableArray arrayWithObjects:green1, green2, green3, green4, green5, nil];
// sorting the array
[greenArray sortUsingDescriptors:[NSArray arrayWithObject:lowToHigh]];
// getting the median
int greenMedian = [[greenArray objectAtIndex:2] intValue];
// setting the pixels green value to median value
rgbaPixel1[2] = greenMedian;
// ---------------------------- E N D O F G R E E N ------------------------
// -------------------------- W O R K I N G O N B L U E ---------------------
// getting blue pixel
NSNumber *blue1 = [NSNumber numberWithInteger:rgbaPixel1[1]];
NSNumber *blue2 = [NSNumber numberWithInteger:rgbaPixel2[1]];
NSNumber *blue3 = [NSNumber numberWithInteger:rgbaPixel3[1]];
NSNumber *blue4 = [NSNumber numberWithInteger:rgbaPixel4[1]];
NSNumber *blue5 = [NSNumber numberWithInteger:rgbaPixel5[1]];
// creating array for blue values
NSMutableArray *blueArray = [NSMutableArray arrayWithObjects:blue1, blue2, blue3, blue4, blue5, nil];
// sorting the array of blues
[blueArray sortUsingDescriptors:[NSArray arrayWithObject:lowToHigh]];
// getting the median
int blueMedian = [[blueArray objectAtIndex:2] intValue];
// setting pixel blue value to the median we just got :)
rgbaPixel1[1] = blueMedian;
// --------------------------------- E N D O F B L U E ----------------------
但它没有那么大的效果!或者也许我以错误的方式获取 RGB 值,我真的需要一些帮助。
【问题讨论】:
标签: ios iphone uiimage core-image cgimage