mediapipe/mediapipe/calculators/image/scale_image_calculator.proto
MediaPipe Team 252a5713c7 Project import generated by Copybara.
GitOrigin-RevId: 6f964e58d874e47fb6207aa97d060a4cd6428527
2020-03-02 10:35:07 -08:00

115 lines
5.3 KiB
Protocol Buffer

// Options for ScaleImageCalculator.
syntax = "proto2";
package mediapipe;
import "mediapipe/framework/calculator.proto";
import "mediapipe/framework/formats/image_format.proto";
// Order of operations.
// 1) Crop the image to fit within min_aspect_ratio and max_aspect_ratio.
// 2) Scale and convert the image to fit inside target_width x target_height
// using the specified scaling algorithm. (maintaining the aspect
// ratio if preserve_aspect_ratio is true).
// The output width and height will be divisible by 2, by default. It is
// possible to output width and height that are odd numbers when the output
// format is SRGB and the aspect ratio is left unpreserved. See
// scale_to_multiple_of for details.
message ScaleImageCalculatorOptions {
extend CalculatorOptions {
optional ScaleImageCalculatorOptions ext = 66237115;
}
// Target output width and height. The final output's size may vary
// depending on the other options below. If unset, use the same width
// or height as the input. If only one is set then determine the other
// from the aspect ratio (after cropping). The output width and height
// will be divisible by 2, by default.
optional int32 target_width = 1;
optional int32 target_height = 2;
// If true, the image is scaled up or down proportionally so that it
// fits inside the box represented by target_width and target_height.
// Otherwise it is scaled to fit target_width and target_height
// completely. In any case, the aspect ratio that is preserved is
// that after cropping to the minimum/maximum aspect ratio. Additionally, if
// true, the output width and height will be divisible by 2.
optional bool preserve_aspect_ratio = 3 [default = true];
// If ratio is positive, crop the image to this minimum and maximum
// aspect ratio (preserving the center of the frame). This is done
// before scaling. The string must contain "/", so to disable cropping,
// set both to "0/1".
// For example, for a min_aspect_ratio of "9/16" and max of "16/9" the
// following cropping will occur:
// 1920x1080 (which is 16:9) is not cropped
// 640x1024 (which is 10:16) is not cropped
// 640x320 (which is 2:1) cropped to 568x320 (just under 16/9)
// 96x480 (which is 1:5), cropped to 96x170 (just over 9/16)
// The resultant frame will always be between (or at) the
// min_aspect_ratio and max_aspect_ratio.
optional string min_aspect_ratio = 4 [default = "9/16"];
optional string max_aspect_ratio = 5 [default = "16/9"];
// If unset, use the same format as the input.
// NOTE: in the current implementation, the output format (either specified
// in the output_format option or inherited from the input format) must be
// SRGB. It can be YCBCR420P if the input_format is also the same.
optional ImageFormat.Format output_format = 6;
enum ScaleAlgorithm {
DEFAULT = 0;
LINEAR = 1;
CUBIC = 2;
AREA = 3;
LANCZOS = 4;
DEFAULT_WITHOUT_UPSCALE = 5; // Option to disallow upscaling.
}
// The upscaling algorithm to use. The default is to use CUBIC. Note that
// downscaling unconditionally uses DDA; see image_processing::
// AffineGammaResizer for documentation.
optional ScaleAlgorithm algorithm = 7 [default = DEFAULT];
// The output image will have this alignment. If set to zero, then
// any alignment could be used. If set to one, the output image will
// be stored contiguously.
optional int32 alignment_boundary = 8 [default = 16];
// Set the alignment padding area to deterministic values (as opposed
// to possibly leaving it as uninitialized memory). The padding is
// the space between the pixel values in a row and the end of the row
// (which may be different due to alignment requirements on the length
// of a row).
optional bool set_alignment_padding = 9 [default = true];
optional bool OBSOLETE_skip_linear_rgb_conversion = 10 [default = false];
// Applies sharpening for downscaled images as post-processing. See
// image_processing::AffineGammaResizer for documentation.
optional float post_sharpening_coefficient = 11 [default = 0.0];
// If input_format is YCBCR420P, input packets contain a YUVImage. If
// input_format is a format other than YCBCR420P or is unset, input packets
// contain an ImageFrame.
// NOTE: in the current implementation, the input format (either specified
// in the input_format option or inferred from the input packets) must be
// SRGB or YCBCR420P.
optional ImageFormat.Format input_format = 12;
// If set to 2, the target width and height will be rounded-down
// to the nearest even number. If set to any positive value other than 2,
// preserve_aspect_ratio must be false and the target width and height will be
// rounded-down to multiples of the given value. If set to any value less than
// 1, it will be treated like 1.
// NOTE: If set to an odd number, the output format must be SRGB.
optional int32 scale_to_multiple_of = 13 [default = 2];
// If true, assume the input YUV is BT.709 (this is the HDTV standard, so most
// content is likely using it). If false use the previous assumption of BT.601
// (mid-80s standard). Ideally this information should be contained in the
// input YUV Frame, but as of 02/06/2019, it's not. Once this info is baked
// in, this flag becomes useless.
optional bool use_bt709 = 14 [default = false];
}