.. _op_ai_onnx_CenterCropPad: CenterCropPad ============= - **Domain**: ``ai.onnx`` - **Since version**: 18 Center crop or pad an input to given dimensions. The crop/pad dimensions can be specified for a subset of the ``axes``; unspecified dimensions will remain unchanged. If the input dimensions are larger than the target crop dimensions, a centered cropping window will be extracted from the input. The starting value for the cropping window is rounded down, which means that if the difference between the input shape and the crop shape is odd, the cropping window will be shifted half a pixel to the left of the input center. If the input dimensions are smaller than the target crop dimensions, the input will be padded equally on both sides to center it in the output. In cases where the total number of padding pixels is odd, an additional pixel will be added to the right side. The padding value used is zero. **Inputs** - **input_data** (*T*): Input to extract the centered crop from. - **shape** (*Tind*): 1-D tensor representing the cropping window dimensions. **Outputs** - **output_data** (*T*): Output data. **Attributes** - **axes** (*int[]*): If provided, it specifies a subset of axes that 'shape' refer to. If not provided, all axes are assumed [0, 1, ..., r-1], where r = rank(data). Negative value means counting dimensions from the back. Accepted range is [-r, r-1], where r = rank(data). Behavior is undefined if an axis is repeated. **Type Constraints** - **T**: Constrain input and output types to all tensor types. Allowed types: tensor(bfloat16), tensor(bool), tensor(complex128), tensor(complex64), tensor(double), tensor(float), tensor(float16), tensor(int16), tensor(int32), tensor(int64), tensor(int8), tensor(string), tensor(uint16), tensor(uint32), tensor(uint64), tensor(uint8). - **Tind**: Constrain indices to integer types Allowed types: tensor(int32), tensor(int64). Examples -------- **test_cc_center_crop_pad_crop** .. code-block:: text Node: CenterCropPad(x, shape) -> (y) .. code-block:: text Inputs: x: shape=(20, 10, 3), dtype=float32 [[[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.], ..., [ 21., 22., 23.], [ 24., 25., 26.], [ 27., 28., 29.]], [[ 30., 31., 32.], [ 33., 34., 35.], [ 36., 37., 38.], ..., [ 51., 52., 53.], [ 54., 55., 56.], [ 57., 58., 59.]], [[ 60., 61., 62.], [ 63., 64., 65.], [ 66., 67., 68.], ..., [ 81., 82., 83.], [ 84., 85., 86.], [ 87., 88., 89.]], ..., [[510., 511., 512.], [513., 514., 515.], [516., 517., 518.], ..., [531., 532., 533.], [534., 535., 536.], [537., 538., 539.]], [[540., 541., 542.], [543., 544., 545.], [546., 547., 548.], ..., [561., 562., 563.], [564., 565., 566.], [567., 568., 569.]], [[570., 571., 572.], [573., 574., 575.], [576., 577., 578.], ..., [591., 592., 593.], [594., 595., 596.], [597., 598., 599.]]] shape: shape=(3,), dtype=int64 [10, 7, 3] Outputs: y: shape=(10, 7, 3), dtype=float32 [[[153., 154., 155.], [156., 157., 158.], [159., 160., 161.], ..., [165., 166., 167.], [168., 169., 170.], [171., 172., 173.]], [[183., 184., 185.], [186., 187., 188.], [189., 190., 191.], ..., [195., 196., 197.], [198., 199., 200.], [201., 202., 203.]], [[213., 214., 215.], [216., 217., 218.], [219., 220., 221.], ..., [225., 226., 227.], [228., 229., 230.], [231., 232., 233.]], ..., [[363., 364., 365.], [366., 367., 368.], [369., 370., 371.], ..., [375., 376., 377.], [378., 379., 380.], [381., 382., 383.]], [[393., 394., 395.], [396., 397., 398.], [399., 400., 401.], ..., [405., 406., 407.], [408., 409., 410.], [411., 412., 413.]], [[423., 424., 425.], [426., 427., 428.], [429., 430., 431.], ..., [435., 436., 437.], [438., 439., 440.], [441., 442., 443.]]] **test_cc_center_crop_pad_crop_and_pad** .. code-block:: text Node: CenterCropPad(x, shape) -> (y) .. code-block:: text Inputs: x: shape=(20, 8, 3), dtype=float32 [[[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.], ..., [ 15., 16., 17.], [ 18., 19., 20.], [ 21., 22., 23.]], [[ 24., 25., 26.], [ 27., 28., 29.], [ 30., 31., 32.], ..., [ 39., 40., 41.], [ 42., 43., 44.], [ 45., 46., 47.]], [[ 48., 49., 50.], [ 51., 52., 53.], [ 54., 55., 56.], ..., [ 63., 64., 65.], [ 66., 67., 68.], [ 69., 70., 71.]], ..., [[408., 409., 410.], [411., 412., 413.], [414., 415., 416.], ..., [423., 424., 425.], [426., 427., 428.], [429., 430., 431.]], [[432., 433., 434.], [435., 436., 437.], [438., 439., 440.], ..., [447., 448., 449.], [450., 451., 452.], [453., 454., 455.]], [[456., 457., 458.], [459., 460., 461.], [462., 463., 464.], ..., [471., 472., 473.], [474., 475., 476.], [477., 478., 479.]]] shape: shape=(3,), dtype=int64 [10, 10, 3] Outputs: y: shape=(10, 10, 3), dtype=float32 [[[ 0., 0., 0.], [120., 121., 122.], [123., 124., 125.], ..., [138., 139., 140.], [141., 142., 143.], [ 0., 0., 0.]], [[ 0., 0., 0.], [144., 145., 146.], [147., 148., 149.], ..., [162., 163., 164.], [165., 166., 167.], [ 0., 0., 0.]], [[ 0., 0., 0.], [168., 169., 170.], [171., 172., 173.], ..., [186., 187., 188.], [189., 190., 191.], [ 0., 0., 0.]], ..., [[ 0., 0., 0.], [288., 289., 290.], [291., 292., 293.], ..., [306., 307., 308.], [309., 310., 311.], [ 0., 0., 0.]], [[ 0., 0., 0.], [312., 313., 314.], [315., 316., 317.], ..., [330., 331., 332.], [333., 334., 335.], [ 0., 0., 0.]], [[ 0., 0., 0.], [336., 337., 338.], [339., 340., 341.], ..., [354., 355., 356.], [357., 358., 359.], [ 0., 0., 0.]]] **test_cc_center_crop_pad_crop_axes_chw** .. code-block:: text Node: CenterCropPad(x, shape) -> (y) Attributes: axes = [1, 2] .. code-block:: text Inputs: x: shape=(3, 20, 8), dtype=float32 [[[ 0., 1., 2., ..., 5., 6., 7.], [ 8., 9., 10., ..., 13., 14., 15.], [ 16., 17., 18., ..., 21., 22., 23.], ..., [136., 137., 138., ..., 141., 142., 143.], [144., 145., 146., ..., 149., 150., 151.], [152., 153., 154., ..., 157., 158., 159.]], [[160., 161., 162., ..., 165., 166., 167.], [168., 169., 170., ..., 173., 174., 175.], [176., 177., 178., ..., 181., 182., 183.], ..., [296., 297., 298., ..., 301., 302., 303.], [304., 305., 306., ..., 309., 310., 311.], [312., 313., 314., ..., 317., 318., 319.]], [[320., 321., 322., ..., 325., 326., 327.], [328., 329., 330., ..., 333., 334., 335.], [336., 337., 338., ..., 341., 342., 343.], ..., [456., 457., 458., ..., 461., 462., 463.], [464., 465., 466., ..., 469., 470., 471.], [472., 473., 474., ..., 477., 478., 479.]]] shape: shape=(2,), dtype=int64 [10, 9] Outputs: y: shape=(3, 10, 9), dtype=float32 [[[ 40., 41., 42., ..., 46., 47., 0.], [ 48., 49., 50., ..., 54., 55., 0.], [ 56., 57., 58., ..., 62., 63., 0.], ..., [ 96., 97., 98., ..., 102., 103., 0.], [104., 105., 106., ..., 110., 111., 0.], [112., 113., 114., ..., 118., 119., 0.]], [[200., 201., 202., ..., 206., 207., 0.], [208., 209., 210., ..., 214., 215., 0.], [216., 217., 218., ..., 222., 223., 0.], ..., [256., 257., 258., ..., 262., 263., 0.], [264., 265., 266., ..., 270., 271., 0.], [272., 273., 274., ..., 278., 279., 0.]], [[360., 361., 362., ..., 366., 367., 0.], [368., 369., 370., ..., 374., 375., 0.], [376., 377., 378., ..., 382., 383., 0.], ..., [416., 417., 418., ..., 422., 423., 0.], [424., 425., 426., ..., 430., 431., 0.], [432., 433., 434., ..., 438., 439., 0.]]] **test_cc_center_crop_pad_crop_axes_hwc** .. code-block:: text Node: CenterCropPad(x, shape) -> (y) Attributes: axes = [0, 1] .. code-block:: text Inputs: x: shape=(20, 8, 3), dtype=float32 [[[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.], ..., [ 15., 16., 17.], [ 18., 19., 20.], [ 21., 22., 23.]], [[ 24., 25., 26.], [ 27., 28., 29.], [ 30., 31., 32.], ..., [ 39., 40., 41.], [ 42., 43., 44.], [ 45., 46., 47.]], [[ 48., 49., 50.], [ 51., 52., 53.], [ 54., 55., 56.], ..., [ 63., 64., 65.], [ 66., 67., 68.], [ 69., 70., 71.]], ..., [[408., 409., 410.], [411., 412., 413.], [414., 415., 416.], ..., [423., 424., 425.], [426., 427., 428.], [429., 430., 431.]], [[432., 433., 434.], [435., 436., 437.], [438., 439., 440.], ..., [447., 448., 449.], [450., 451., 452.], [453., 454., 455.]], [[456., 457., 458.], [459., 460., 461.], [462., 463., 464.], ..., [471., 472., 473.], [474., 475., 476.], [477., 478., 479.]]] shape: shape=(2,), dtype=int64 [10, 9] Outputs: y: shape=(10, 9, 3), dtype=float32 [[[120., 121., 122.], [123., 124., 125.], [126., 127., 128.], ..., [138., 139., 140.], [141., 142., 143.], [ 0., 0., 0.]], [[144., 145., 146.], [147., 148., 149.], [150., 151., 152.], ..., [162., 163., 164.], [165., 166., 167.], [ 0., 0., 0.]], [[168., 169., 170.], [171., 172., 173.], [174., 175., 176.], ..., [186., 187., 188.], [189., 190., 191.], [ 0., 0., 0.]], ..., [[288., 289., 290.], [291., 292., 293.], [294., 295., 296.], ..., [306., 307., 308.], [309., 310., 311.], [ 0., 0., 0.]], [[312., 313., 314.], [315., 316., 317.], [318., 319., 320.], ..., [330., 331., 332.], [333., 334., 335.], [ 0., 0., 0.]], [[336., 337., 338.], [339., 340., 341.], [342., 343., 344.], ..., [354., 355., 356.], [357., 358., 359.], [ 0., 0., 0.]]] **test_cc_center_crop_pad_crop_negative_axes_hwc** .. code-block:: text Node: CenterCropPad(x, shape) -> (y) Attributes: axes = [-3, -2] .. code-block:: text Inputs: x: shape=(20, 8, 3), dtype=float32 [[[ 0., 1., 2.], [ 3., 4., 5.], [ 6., 7., 8.], ..., [ 15., 16., 17.], [ 18., 19., 20.], [ 21., 22., 23.]], [[ 24., 25., 26.], [ 27., 28., 29.], [ 30., 31., 32.], ..., [ 39., 40., 41.], [ 42., 43., 44.], [ 45., 46., 47.]], [[ 48., 49., 50.], [ 51., 52., 53.], [ 54., 55., 56.], ..., [ 63., 64., 65.], [ 66., 67., 68.], [ 69., 70., 71.]], ..., [[408., 409., 410.], [411., 412., 413.], [414., 415., 416.], ..., [423., 424., 425.], [426., 427., 428.], [429., 430., 431.]], [[432., 433., 434.], [435., 436., 437.], [438., 439., 440.], ..., [447., 448., 449.], [450., 451., 452.], [453., 454., 455.]], [[456., 457., 458.], [459., 460., 461.], [462., 463., 464.], ..., [471., 472., 473.], [474., 475., 476.], [477., 478., 479.]]] shape: shape=(2,), dtype=int64 [10, 9] Outputs: y: shape=(10, 9, 3), dtype=float32 [[[120., 121., 122.], [123., 124., 125.], [126., 127., 128.], ..., [138., 139., 140.], [141., 142., 143.], [ 0., 0., 0.]], [[144., 145., 146.], [147., 148., 149.], [150., 151., 152.], ..., [162., 163., 164.], [165., 166., 167.], [ 0., 0., 0.]], [[168., 169., 170.], [171., 172., 173.], [174., 175., 176.], ..., [186., 187., 188.], [189., 190., 191.], [ 0., 0., 0.]], ..., [[288., 289., 290.], [291., 292., 293.], [294., 295., 296.], ..., [306., 307., 308.], [309., 310., 311.], [ 0., 0., 0.]], [[312., 313., 314.], [315., 316., 317.], [318., 319., 320.], ..., [330., 331., 332.], [333., 334., 335.], [ 0., 0., 0.]], [[336., 337., 338.], [339., 340., 341.], [342., 343., 344.], ..., [354., 355., 356.], [357., 358., 359.], [ 0., 0., 0.]]] **test_cc_center_crop_pad_pad** .. code-block:: text Node: CenterCropPad(x, shape) -> (y) .. code-block:: text Inputs: x: shape=(10, 7, 3), dtype=float32 [[[ 1., 2., 3.], [ 4., 5., 6.], [ 7., 8., 9.], ..., [ 13., 14., 15.], [ 16., 17., 18.], [ 19., 20., 21.]], [[ 22., 23., 24.], [ 25., 26., 27.], [ 28., 29., 30.], ..., [ 34., 35., 36.], [ 37., 38., 39.], [ 40., 41., 42.]], [[ 43., 44., 45.], [ 46., 47., 48.], [ 49., 50., 51.], ..., [ 55., 56., 57.], [ 58., 59., 60.], [ 61., 62., 63.]], ..., [[148., 149., 150.], [151., 152., 153.], [154., 155., 156.], ..., [160., 161., 162.], [163., 164., 165.], [166., 167., 168.]], [[169., 170., 171.], [172., 173., 174.], [175., 176., 177.], ..., [181., 182., 183.], [184., 185., 186.], [187., 188., 189.]], [[190., 191., 192.], [193., 194., 195.], [196., 197., 198.], ..., [202., 203., 204.], [205., 206., 207.], [208., 209., 210.]]] shape: shape=(3,), dtype=int64 [20, 10, 3] Outputs: y: shape=(20, 10, 3), dtype=float32 [[[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], ..., [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], ..., [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], ..., [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], ..., [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], ..., [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], ..., [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]], [[0., 0., 0.], [0., 0., 0.], [0., 0., 0.], ..., [0., 0., 0.], [0., 0., 0.], [0., 0., 0.]]]