void Conversions::ToColor(Image& Source, Image& Dest) { CheckSizeAndType(Source, Dest); Check1Channel(Source); switch (Dest.NbChannels()) { case 1: Copy(Source, Dest); break; case 2: Kernel(to_2channels, Source, Dest, Source.Step(), Dest.Step()); break; case 3: Kernel(to_3channels, Source, Dest, Source.Step(), Dest.Step()); break; case 4: Kernel(to_4channels, Source, Dest, Source.Step(), Dest.Step()); break; default: throw cl::Error(CL_INVALID_ARG_VALUE, "Wrong ChannelNo in Conversions::SelectChannel() - allowed values : 1 to 4"); } // select_channel1 does what we want Kernel(select_channel1, Source, Dest); }
void Conversions::ToGray(Image& Source, Image& Dest) { CheckSizeAndType(Source, Dest); Check1Channel(Dest); Kernel(to_gray, Source, Dest, Source.Step(), Dest.Step()); }
void Conversions::Copy4Cto3C(Image& Source, Image& Dest) { CheckSizeAndType(Source, Dest); if (Source.NbChannels() != 4) throw cl::Error(CL_INVALID_VALUE, "Source image must be 4 channels in Copy4Cto3C"); if (Dest.NbChannels() != 3) throw cl::Error(CL_INVALID_VALUE, "Dest image must be 3 channels in Copy4Cto3C"); Kernel(copy4Cto3C, Source, Dest, Source.Step(), Dest.Step()); }
void Conversions::SelectChannel(Image& Source, Image& Dest, int ChannelNo) { CheckSizeAndType(Source, Dest); Check1Channel(Dest); switch (ChannelNo) { case 1: Kernel(select_channel1, Source, Dest, Source.Step(), Dest.Step()); break; case 2: Kernel(select_channel2, Source, Dest, Source.Step(), Dest.Step()); break; case 3: Kernel(select_channel3, Source, Dest, Source.Step(), Dest.Step()); break; case 4: Kernel(select_channel4, Source, Dest, Source.Step(), Dest.Step()); break; default: throw cl::Error(CL_IMAGE_FORMAT_NOT_SUPPORTED, "Unsupported number of channels"); } }
void CheckSimilarity(const ImageBase& Img1, const ImageBase& Img2) { CheckSizeAndType(Img1, Img2); CheckSameNbChannels(Img1, Img2); }