Partilhar via


DML_RESAMPLE3_OPERATOR_DESC estrutura (directml.h)

Faz uma nova amostragem dos elementos do tensor de origem para o de destino, com antialização quando apropriado, usando os fatores de escala para calcular o tamanho do tensor de destino. Você pode usar um modo de interpolação linear ou vizinho mais próximo. O operador suporta interpolação em várias dimensões, não apenas 2D. Assim, você pode manter o mesmo tamanho espacial, mas interpolar entre canais ou entre lotes. A relação entre as coordenadas de entrada e saída é a seguinte:

OutputTensorX = (InputTensorX + InputPixelOffset) * Scale + OutputPixelOffset

Importante

Essa API está disponível como parte do pacote redistribuível autônomo do DirectML (consulte Microsoft.AI.DirectML versão 1.15.1 e posterior. Consulte também o histórico de versões do DirectML.

Sintaxe

struct DML_RESAMPLE3_OPERATOR_DESC
{
    const DML_TENSOR_DESC* InputTensor;
    const DML_TENSOR_DESC* OutputTensor;
    DML_INTERPOLATION_MODE InterpolationMode;
    DML_AXIS_DIRECTION RoundingDirection;
    UINT DimensionCount;
    _Field_size_(DimensionCount) const FLOAT* Scales;
    _Field_size_(DimensionCount) const FLOAT* InputPixelOffsets;
    _Field_size_(DimensionCount) const FLOAT* OutputPixelOffsets;
    BOOL Antialiased;
};

Membros

InputTensor

Tipo: const DML_TENSOR_DESC*

O tensor que contém os dados de entrada.

OutputTensor

Tipo: const DML_TENSOR_DESC*

O tensor para gravar os dados de saída.

InterpolationMode

Tipo: DML_INTERPOLATION_MODE

Este campo determina o tipo de interpolação usado para escolher pixels de saída.

  • DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR. Usa o algoritmo vizinho mais próximo , que escolhe o elemento de entrada mais próximo do deslocamento de pixel correspondente para cada elemento de saída.

  • DML_INTERPOLATION_MODE_LINEAR. Usa o algoritmo de interpolação linear , que calcula o elemento de saída calculando a média ponderada dos dois elementos de entrada vizinhos mais próximos por dimensão. A reamostragem é suportada até quatro dimensões (quadrilinear), onde a média ponderada é calculada em um total de dezesseis elementos de entrada para cada elemento de saída.

RoundingDirection

Tipo: DML_AXIS_DIRECTION

A direção para arredondar ao longo de cada eixo ao mapear coordenadas fracionárias de volta para pixels de entrada. Como a interpolação bilinear interpola coordenadas fracionárias de qualquer maneira, isso afeta apenas DML_INTERPOLATION_MODE_NEAREST_NEIGHBOR.

  • DML_AXIS_DIRECTION_INCREASING. Coordenadas fracionárias arredondadas em direção a valores de eixo crescentes (ceil).

  • DML_AXIS_DIRECTION_DECREASING. Coordenadas fracionárias arredondadas em direção a valores de eixo decrescentes (piso).

DimensionCount

Tipo: UINT

O número de elementos nas matrizes Scales, InputPixelOffsets e OutputPixelOffsets . Esse valor deve corresponder à contagem de dimensões de InputTensor e OutputTensor.

Scales

Tipo: _Field_size_(DimensionCount) const FLOAT*

As escalas a serem aplicadas ao redefinir a amostra da entrada, onde as escalas > 1 aumentam a escala da imagem e as escalas < 1 reduzem a escala da imagem para essa dimensão. Observe que as escalas não precisam ser exatamente OutputSize / InputSize. Se a entrada após o dimensionamento for maior do que o limite de saída, cortaremos para o tamanho da saída. Por outro lado, se a entrada após o dimensionamento for menor do que o limite de saída, as bordas de saída serão fixadas.

InputPixelOffsets

Tipo: _Field_size_(DimensionCount) const FLOAT*

Os deslocamentos a serem aplicados aos pixels de entrada antes da reamostragem. Quando esse valor é 0, o canto superior esquerdo do pixel é usado em vez de seu centro, o que geralmente não dá o resultado esperado. Para redefinir a amostra da imagem usando o centro dos pixels e obter o mesmo comportamento que DML_RESAMPLE_OPERATOR_DESC, esse valor deve ser 0,5.

OutputPixelOffsets

Tipo: _Field_size_(DimensionCount) const FLOAT*

Os deslocamentos a serem aplicados aos pixels de saída após a reamostragem. Quando esse valor é 0, o canto superior esquerdo do pixel é usado em vez de seu centro, o que geralmente não dá o resultado esperado. Para redefinir a amostra da imagem usando o centro dos pixels e obter o mesmo comportamento que DML_RESAMPLE_OPERATOR_DESC, esse valor deve ser -0,5.

Antialiased

Tipo: BOOL

A suavização de borda é obtida esticando o filtro de reamostragem por um fator max(1, 1 / scale), o que significa que, ao reduzir a amostragem, mais pixels de entrada contribuem para um pixel de saída.

Isso ocorre quando esse sinalizador é definido como TRUEe assumindo as seguintes condições:

  • InterpolationMode é DML_INTERPOLATION_MODE_LINEAR
  • 1/Escalas > 2

Em seguida, esse operador usará um filtro antialiasing ao reduzir o dimensionamento.

Comentários

Quando Antialiased é false, este operador é equivalente a DML_RESAMPLE2_OPERATOR_DESC.

Disponibilidade

Este operador foi introduzido em DML_FEATURE_LEVEL_6_4.

Restrições de tensores

InputTensor e OutputTensor devem ter o mesmo DataType e DimensionCount.

Suporte tensor

Tensor Tipo Contagens de dimensões suportadas Tipos de dados suportados
InputTensor Entrada 1 a 4 anos FLOAT32, FLOAT16, INT8, UINT8
OutputTensor Realização 1 a 4 anos FLOAT32, FLOAT16, INT8, UINT8

Requerimentos

   
de cabeçalho DirectML.H