static void Apply( ImageVariant& image, const BinarizeInstance& instance ) { for ( int c = 0; c < image.NumberOfNominalChannels(); ++c ) { image.SelectChannel( c ); if ( instance.isGlobal ) image.Binarize( instance.level[0] ); else image.Binarize( instance.level[c] ); } }
bool RescaleInstance::ExecuteOn( View& view ) { AutoViewLock lock( view ); ImageVariant image = view.Image(); if ( image.IsComplexSample() ) return false; Console().EnableAbort(); StandardStatus status; image.SetStatusCallback( &status ); switch ( mode ) { default: case RescalingMode::RGBK: image->SelectNominalChannels(); image.Rescale(); break; case RescalingMode::RGBK_Individual: for ( int c = 0; c < image->NumberOfNominalChannels(); ++c ) { image->SelectChannel( c ); image.Rescale(); } break; case RescalingMode::CIEL: { ImageVariant L; image.GetLightness( L ); L.Rescale(); image.SetLightness( L ); } break; case RescalingMode::CIEY: { ImageVariant Y; image.GetLuminance( Y ); Y.Rescale(); image.SetLuminance( Y ); } break; } return true; }
StarDetector::StarDetector( const ImageVariant& image, int channel, const DPoint& pos, int radius, float threshold, bool autoAperture ) { star.status = NotDetected; star.channel = channel; star.rect = pos; star.pos = pos; if ( image ) { image->SelectChannel( channel ); if ( image.IsFloatSample() ) switch ( image.BitsPerSample() ) { case 32: star.status = Detect( star.pos, radius, threshold, static_cast<const Image&>( *image ) ); break; case 64: star.status = Detect( star.pos, radius, threshold, static_cast<const DImage&>( *image ) ); break; } else switch ( image.BitsPerSample() ) { case 8: star.status = Detect( star.pos, radius, threshold, static_cast<const UInt8Image&>( *image ) ); break; case 16: star.status = Detect( star.pos, radius, threshold, static_cast<const UInt16Image&>( *image ) ); break; case 32: star.status = Detect( star.pos, radius, threshold, static_cast<const UInt32Image&>( *image ) ); break; } star.rect = DRect( star.pos - double( radius ), star.pos + double( radius ) ); if ( autoAperture && star ) { Rect r = star.rect.RoundedToInt(); for ( double m0 = 1; ; ) { image->SelectRectangle( r ); double m = Matrix::FromImage( image ).Median(); if ( m0 < m || (m0 - m)/m0 < 0.01 ) break; m0 = m; r.InflateBy( 1, 1 ); } star.rect = r; } } }
bool LarsonSekaninaInstance::ExecuteOn( View& view ) { AutoViewLock lock( view ); ImageVariant image = view.Image(); if ( image.IsComplexSample() ) return false; StandardStatus status; image.SetStatusCallback( &status ); Console().EnableAbort(); ImageVariant sharpImg; sharpImg.CreateFloatImage( (image.BitsPerSample() > 32) ? image.BitsPerSample() : 32 ); sharpImg.AllocateImage( image->Width(), image->Height(), 1, ColorSpace::Gray ); if ( useLuminance && image->IsColor() ) { ImageVariant L; image.GetLightness( L ); Convolve( L, sharpImg, interpolation, radiusDiff, angleDiff, center, 0 ); ApplyFilter( L, sharpImg, amount, threshold, deringing, rangeLow, rangeHigh, false, 0, highPass ); image.SetLightness( L ); } else { for ( int c = 0, n = image->NumberOfNominalChannels(); c < n; ++c ) { image->SelectChannel( c ); if ( n > 1 ) Console().WriteLn( "<end><cbr>Processing channel #" + String( c ) ); Convolve( image, sharpImg, interpolation, radiusDiff, angleDiff, center, c ); ApplyFilter( image, sharpImg, amount, threshold, deringing, rangeLow, rangeHigh, disableExtension, c, highPass ); } } return true; }