Como um computador eleva a resolução de 1024x768 para 1920x1080?

8

Sem haver barras pretas, quero dizer. 1080 não é múltiplo de 768, existe algum tipo de perda de dados?

V0ight
fonte
5
Existem algoritmos de dimensionamento, como o dimensionamento bicúbico, que usam splines para aproximar a cor dos pixels quando dimensionados para qualquer tamanho.
EvilTak
@EvilTak, você pode expandir seu comentário em uma pequena resposta?
glampert
@glampert fez isso. Deseja que eu remova meu comentário?
EvilTak
@ EvilTak, acho que você pode deixar. Boa resposta btw, obrigado!
glampert

Respostas:

8

Em essência, uma imagem é um grupo de amostras de pontos (leia Um pixel não é um quadrado pequeno 3 ). Quando você transforma ou dimensiona a imagem, é necessário redimensioná-la. Então, o que você faz, teoricamente, é pegar as amostras pontuais e convertê-las em uma função contínua. Então você prova essa função contínua e reconstrói um sinal. Portanto, existem duas ou três fases diferentes aqui.

  1. Convertendo as amostras em uma função contínua, (reconstrução da função).
  2. (Transformando)
  3. Re-amostragem do sinal

Observe que nenhuma dessas etapas possui um formulário fixo. Na prática, quando otimizado, é impossível dizer que existem etapas. A transformação realmente não precisa ser simples, pode ser o mapeamento da forma em espiral, etc.

Reconstrução de sinal

Imagem 1 : Um sinal 1-D reconstruído por diferentes filtros.

Na prática, sabe-se bastante sobre a reconstrução de sinais no campo de processamento de sinais. Projetar esses filtros e escolher o correto é uma forma de arte por si só. Mas, em essência, a escolha do filtro é uma troca entre desfoque e toque . É claro que o algoritmo também possui outras qualidades, como quantas instruções são necessárias para implementar, qual a rapidez e a quantidade de memória necessária, etc. O que pode ser muito importante em aplicativos incorporados ou em tempo real.

O processo

Imagem 2 : Visão geral de todo o processo.

joojaa
fonte
5

Existem numerosos algoritmos de aumento e redução de escala disponíveis para dimensionar imagens de qualquer resolução para qualquer outra resolução arbitrária. Cada algoritmo geralmente envolve uma troca entre eficiência, suavidade e nitidez, com graus variados de cada troca para algoritmos diferentes.

Confira este artigo da Wikipedia para esses algoritmos e exemplos de tais algoritmos.

O algoritmo mais conhecido (e usado) popularmente é o algoritmo de interpolação bicúbica . Ele interpola entre pontos 2D em uma grade retangular. Usando splines cúbicos (ou interpolação cúbica), primeiro interpola em uma dimensão (localiza a linha / coluna interpolada) e, em seguida, interpola a linha / coluna interpolada na outra dimensão.

A interpolação bilinear é semelhante à interpolação bicúbica, exceto que o primeiro interpola usando uma função linear e pode interpolar apenas entre dois valores e o último usa uma função cúbica e pode interpolar entre quatro valores.

A função simples para interpolação bicúbica é a seguinte:

f(f(p00, p01, p02, p03, y),
  f(p10, p11, p12, p13, y),
  f(p20, p21, p22, p23, y),
  f(p30, p31, p32, p33, y),
  x)

onde (x, y) é a posição interpolada ep [] [] é a matriz 2d que representa a grade 4 * 4.

Verifique este link para obter mais informações e exemplos de código, o que realmente ajuda muito!

EvilTak
fonte
0

Enquanto as outras respostas dadas estiverem corretas, não tenho certeza de que respondam totalmente à sua pergunta. Para não obter barras pretas, você tem duas opções se o destino não tiver a mesma forma (ou proporção) da origem:

  1. Preencha o destino deixando alguns pixels da fonte fora do destino. No seu exemplo, a origem é 1024x768 e o destino é 1920x1080. Se você aumentar a escala da imagem original para que o resultado seja 1920x1440, poderá cortar a parte superior e / ou inferior para torná-la 1920x1080.
  2. Estique a imagem de destino para caber. Então você escalaria verticalmente em 1080/768 = 1.40625 e horizontalmente em 1920/1024 = 1.875. Isso quase nunca é o que você deseja e parece terrível na maioria dos casos. (É isso que faz as pessoas parecerem muito mais amplas do que deveriam e transforma círculos em ovais e rotações em tesouras.)

Há outra opção, mas ela não se encaixa nos seus critérios - dimensione uniformemente, mas apenas até que uma dimensão seja tão grande quanto o destino. Nesse caso, você dimensionaria horizontal e verticalmente em 1,40625 para obter um resultado de 1440x1080. Isso geralmente é chamado de "dimensionar para caber".

Para qualquer uma dessas opções, você pode usar o algoritmo de dimensionamento que atenda às suas necessidades.

user1118321
fonte
11
Você também pode ter barras brancas. Você também pode usar alguma função de síntese de imagem para preencher os pixels. Sobrepor uma imagem, ela é cortada e uma que se estende por exemplo. aqui é simplesmente uma infinidade de maneiras de lidar com nenhum dado. Eu acho que a maioria de nós apenas assumiu que seria uma escala não uniforme.
Joojaa
Muito verdadeiro. Eu assumi que o pôster original não queria preencher com uma cor sólida e estava interessado apenas no aspecto da escala, já que era sobre isso que eles perguntavam. Mas existem muitos outros métodos de preenchimento. Existem também métodos de escala não lineares, nos quais o centro mantém sua proporção e as bordas são esticadas, por exemplo.
User1118321