CIMedianFilter는 어떻게 작동합니까? 나는 그것을위한 알고리즘을 의미하고, 나는 잡음 제거를 원한다. 나는이 코드로 그것을 시도했다 :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 값을 잘못된 방법으로 가져 오는 중, 정말이 일부 도움이 필요합니다.
평균으로부터 평균을 계산하는 알고리즘을 이해할 수 없습니다. 배열 (0, 100, 100)의 경우 평균은 67이고 가장 큰 값은 67이며 중앙값이 아닙니다. –
Brad Larson의 필터를 정확하게 복사했습니다. 수학이 합쳐지지 않으면 나를 보지 마라.평균 (?)에서 중간 값을 계산하는 방법을 알려주는 백만 개의 웹 사이트가 있습니다. 필요한 경우, 귀하의 필요에 따라 그것들을 참조하십시오. –