BR112018000825B1 - METHOD IMPLEMENTED BY COMPUTER AND NON-TRANSITORY COMPUTER READABLE MEDIUM - Google Patents

METHOD IMPLEMENTED BY COMPUTER AND NON-TRANSITORY COMPUTER READABLE MEDIUM Download PDF

Info

Publication number
BR112018000825B1
BR112018000825B1 BR112018000825-7A BR112018000825A BR112018000825B1 BR 112018000825 B1 BR112018000825 B1 BR 112018000825B1 BR 112018000825 A BR112018000825 A BR 112018000825A BR 112018000825 B1 BR112018000825 B1 BR 112018000825B1
Authority
BR
Brazil
Prior art keywords
frame
mathematical transformation
transformation
video
distortion
Prior art date
Application number
BR112018000825-7A
Other languages
Portuguese (pt)
Other versions
BR112018000825A2 (en
Inventor
Wei Hong
Rodrigo Carceroni
Original Assignee
Google Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US14/883,515 external-priority patent/US9967461B2/en
Application filed by Google Llc filed Critical Google Llc
Publication of BR112018000825A2 publication Critical patent/BR112018000825A2/en
Publication of BR112018000825B1 publication Critical patent/BR112018000825B1/en

Links

Abstract

ESTABILIZAÇÃO DE VÍDEO. Em geral, o assunto pode ser incorporado em métodos, sistemas e produtos de programa para identificar, por um sistema de computação e usando primeiro e segundo quadros de um vídeo, uma transformação que indica o movimento de uma câmera com respeito aos quadros. O sistema de computação gera uma transformação modificada de modo que a transformação é menos representativa de movimento recente. O sistema de computação utiliza a transformação e a transformação modificada para gerar uma segunda transformação. O sistema de computação identifica uma distorção antecipada que estaria presente em uma versão estabilizada do segundo quadro. O sistema de computação determina uma quantidade pela qual reduzir um efeito de estabilização. O sistema de computação aplica a segunda transformação para o segundo quadro para estabilizar o segundo quadro, em que o efeito de estabilização foi reduzido com base na quantidade determinada pela qual reduzir o efeito de estabilização.VIDEO STABILIZATION. In general, the subject can be incorporated into methods, systems and program products to identify, by a computing system and using first and second frames of a video, a transformation that indicates the movement of a camera with respect to the frames. The computing system generates a modified transformation so that the transformation is less representative of recent movement. The computing system uses the transformation and the modified transformation to generate a second transformation. The computing system identifies an early distortion that would be present in a stabilized version of the second frame. The computer system determines an amount by which to reduce a stabilization effect. The computing system applies the second transformation to the second frame to stabilize the second frame, where the stabilization effect has been reduced based on the determined amount by which to reduce the stabilization effect.

Description

CAMPO TÉCNICOTECHNICAL FIELD

[001] Este documento geralmente se relaciona com a estabilização de vídeo.[001] This document generally relates to video stabilization.

FUNDAMENTOSFUNDAMENTALS

[002] A gravação de vídeo costumava ser o domínio de dispositivos de gravação de vídeo dedicados, mas é mais comum encontrar dispositivos cotidianos, como telefones celulares e tablets que são capazes de gravar vídeos. Um problema com a maioria dos dispositivos de gravação portáteis é que esses dispositivos sofrem de vibração de vídeo, em que os movimentos involuntários de um usuário, enquanto mantendo o dispositivo de gravação, afetam a qualidade do vídeo.[002] Video recording used to be the domain of dedicated video recording devices, but it is more common to find everyday devices such as mobile phones and tablets that are capable of recording videos. A problem with most portable recording devices is that these devices suffer from video shake, where a user's involuntary movements while holding the recording device affect the quality of the video.

[003] Agitar o dispositivo de gravação pode resultar em um vídeo igualmente balançado a menos que a agitação seja compensada, por exemplo, por um mecanismo de estabilização de vídeo. A estabilização de vídeo óptica pode diminuir a vibração presente no vídeo movendo mecanicamente componentes do dispositivo de gravação, como uma lente ou o sensor de imagem. Dispositivos de estabilização de vídeo ópticos, no entanto, podem adicionar custos de material e de fabricação a um dispositivo de gravação. Além disso, dispositivos de estabilização de vídeo ópticos podem adicionar tamanho a um dispositivo de gravação, e muitas vezes é desejável que os dispositivos de gravação sejam pequenos.[003] Shaking the recording device can result in equally jerky video unless the shaking is compensated for, for example, by a video stabilization mechanism. Optical video stabilization can lessen the vibration present in the video by mechanically moving recording device components such as a lens or image sensor. Optical video stabilization devices, however, can add material and manufacturing costs to a recording device. Additionally, optical video stabilization devices can add size to a recording device, and it is often desirable for recording devices to be small.

SUMÁRIOSUMMARY

[004] Este documento descreve técnicas, métodos, sistemas e outros mecanismos para estabilizar vídeo.[004] This document describes techniques, methods, systems, and other mechanisms for stabilizing video.

[005] Como descrição adicional para as modalidades descritas abaixo, a presente descrição descreve as seguintes modalidades.[005] As an additional description for the embodiments described below, this description describes the following embodiments.

[006] A modalidade 1 é um método implementado por computador. O método compreende receber, por um sistema de computação, primeiro e segundo quadros de um vídeo que foi capturado por um dispositivo de gravação, como uma câmera. O método compreende identificar, pelo sistema de computação e utilizando o primeiro e segundo quadros do vídeo, uma transformação matemática que indica o movimento da câmera em relação a uma cena capturada pelo vídeo (ou seja, uma cena representada no vídeo) desde quando o primeiro quadro foi capturado para quando o segundo quadro foi capturado. O método compreende gerar, pelo sistema de computação, uma transformação matemática modificada por modificar a transformação matemática que indica o movimento da câmera em relação à cena, de modo que a transformação matemática seja menos representativa do movimento que começou recentemente. O método compreende gerar, pelo sistema de computação utilizando a transformação matemática e a transformação matemática modificada, uma segunda transformação matemática que pode ser aplicada ao segundo quadro para estabilizar o segundo quadro. O método compreende identificar, pelo sistema de computação, uma distorção antecipada que estaria presente em uma versão estabilizada do segundo quadro resultante da aplicação da segunda transformação matemática para o segundo quadro, com base na diferença entre: (i) uma quantidade de distorção na direção horizontal resultante da aplicação da segunda transformação matemática ao segundo quadro, e (ii) uma quantidade de distorção na direção vertical resultante da aplicação da segunda transformação matemática para o segundo quadro. O método compreende determinar, pelo sistema de computação, uma quantidade para reduzir um efeito de estabilização que resulta da aplicação da segunda transformação matemática para o segundo quadro, com base em um grau em que a distorção antecipada excede uma alteração aceitável na distorção que foi calculada a partir de distorção em múltiplos quadros do vídeo que precederam o segundo quadro. O método compreende gerar, pelo sistema de computação, a versão estabilizada do segundo quadro por aplicar a segunda transformação matemática para o segundo quadro, onde um efeito de estabilização de aplicação da segunda transformação matemática para o segundo quadro foi reduzido com base na quantidade determinada pela qual reduzir o efeito de estabilização.[006] Modality 1 is a computer-implemented method. The method comprises receiving, by a computing system, first and second frames of a video that has been captured by a recording device such as a camera. The method comprises identifying, by the computer system and using the first and second frames of the video, a mathematical transformation that indicates the movement of the camera in relation to a scene captured by the video (that is, a scene represented in the video) since when the first frame was captured to when the second frame was captured. The method comprises generating, by the computer system, a modified mathematical transformation by modifying the mathematical transformation that indicates the movement of the camera relative to the scene, so that the mathematical transformation is less representative of the movement that has just begun. The method comprises generating, by the computer system using the mathematical transformation and the modified mathematical transformation, a second mathematical transformation that can be applied to the second frame to stabilize the second frame. The method comprises identifying, by the computer system, an anticipated distortion that would be present in a stabilized version of the second frame resulting from applying the second mathematical transformation to the second frame, based on the difference between: (i) an amount of distortion in the direction horizontal direction resulting from applying the second mathematical transformation to the second frame, and (ii) an amount of distortion in the vertical direction resulting from applying the second mathematical transformation to the second frame. The method comprises determining, by the computer system, an amount to reduce a stabilization effect that results from applying the second mathematical transformation to the second frame, based on a degree to which the anticipated distortion exceeds an acceptable change in distortion that has been calculated. from distortion in multiple frames of the video that preceded the second frame. The method comprises generating, by the computer system, the stabilized version of the second frame by applying the second mathematical transformation to the second frame, where a stabilization effect of applying the second mathematical transformation to the second frame has been reduced based on the amount determined by which reduce the stabilization effect.

[007] A modalidade 2 é o método da modalidade 1, caracterizado pelo fato de que o segundo quadro é um quadro do vídeo que segue imediatamente o primeiro quadro do vídeo.[007] Mode 2 is the method of mode 1, characterized by the fact that the second frame is a video frame that immediately follows the first video frame.

[008] A modalidade 3 é o método da modalidade 1, caracterizado pelo fato de que a transformação matemática que indica movimento da câmera inclui uma matriz de transformação de homografia.[008] Modality 3 is the method of modality 1, characterized by the fact that the mathematical transformation that indicates camera movement includes a homograph transformation matrix.

[009] A modalidade 4 é o método da modalidade 3, em que a modificação da transformação matemática inclui a aplicação de um filtro passa-baixa à matriz de transformação de homografia.[009] Modality 4 is the method of modality 3, in which the modification of the mathematical transformation includes the application of a low-pass filter to the homography transformation matrix.

[010] A modalidade 5 é o método da modalidade 3, em que a distorção antecipada é baseada em uma diferença entre um valor de zoom horizontal na segunda transformação matemática e um valor de zoom vertical na segunda transformação matemática.[010] Mode 5 is the method of mode 3, where the early distortion is based on a difference between a horizontal zoom value in the second math transformation and a vertical zoom value in the second math transformation.

[011] A modalidade 6 é o método da modalidade 1, caracterizado pelo fato de que a modificação da transformação matemática inclui a modificação da transformação matemática de modo que a transformação matemática modificada seja mais representativa do movimento que ocorreu durante um longo período de tempo do que a transformação matemática.[011] Modality 6 is the method of modality 1, characterized by the fact that modifying the mathematical transformation includes modifying the mathematical transformation so that the modified mathematical transformation is more representative of the movement that occurred over a long period of time than the than the mathematical transformation.

[012] A modalidade 7 é o método da modalidade 1, caracterizado pelo fato de que a determinação da quantidade para reduzir o efeito de estabilização que resulta da aplicação da segunda transformação matemática para o segundo quadro é ainda baseada em uma velocidade de movimento determinada da câmera a partir do primeiro quadro para o segundo quadro excedendo uma mudança aceitável na velocidade de movimento da câmera que foi calculada com base na velocidade de movimento da câmera entre múltiplos quadros do vídeo que precederam o segundo quadro.[012] Modality 7 is the method of modality 1, characterized by the fact that the determination of the amount to reduce the stabilization effect that results from applying the second mathematical transformation to the second frame is still based on a determined movement speed of the camera from the first frame to the second frame exceeding an acceptable change in camera movement speed that was calculated based on the camera movement speed between multiple frames of video preceding the second frame.

[013] A modalidade 8 é o método da modalidade 1, caracterizado pelo fato de que gerar a versão estabilizada do segundo quadro inclui aplicar zoom em uma versão do segundo quadro que foi gerada aplicando a segunda transformação matemática para o segundo quadro.[013] Modality 8 is the method of modality 1, characterized by the fact that generating the stabilized version of the second frame includes zooming in on a version of the second frame that was generated by applying the second mathematical transformation to the second frame.

[014] A modalidade 9 é o método da modalidade 1, caracterizado pelo fato de que as operações compreendem ainda deslocar uma região ampliada da versão do segundo quadro horizontalmente ou verticalmente para evitar que a região ampliada do segundo quadro apresente uma região inválida.[014] Mode 9 is the method of mode 1, characterized by the fact that the operations also comprise shifting an enlarged region of the version of the second frame horizontally or vertically to prevent the enlarged region of the second frame from presenting an invalid region.

[015] A modalidade 10 é dirigida a um sistema que inclui um meio gravável com instruções armazenadas no mesmo, as instruções, quando executadas por um ou mais processadores, provocam o desempenho das operações de acordo com o método de qualquer uma das modalidades 1 a 9.[015] Mode 10 is addressed to a system that includes a recordable medium with instructions stored therein, the instructions, when executed by one or more processors, cause the performance of operations according to the method of any of the modes 1 to 9.

[016] Implementações particulares podem, em certos casos, realizar uma ou mais das seguintes vantagens. As técnicas de estabilização de vídeo aqui descritas podem compensar o movimento em mais de dois graus de liberdade (por exemplo, mais do que apenas movimento horizontal e vertical), por exemplo, compensando o movimento em oito graus de liberdade (por exemplo, aspectos de translação, aspectos de rotação, aspectos de aplicação de zoom, e distorção de obturador de rolamento não rígida). As técnicas de estabilização de vídeo aqui descritas podem funcionar à medida que o vídeo está sendo capturado por um dispositivo e podem não requerer informações de quadros futuros. Em outras palavras, as técnicas de estabilização de vídeo podem ser capazes de usar informações de apenas quadros passados na estabilização de um quadro gravado mais recentemente, de modo que o sistema possa armazenar um fluxo de vídeo estabilizado à medida que o fluxo de vídeo é capturado (por exemplo, sem armazenar múltiplos quadros de vídeo não estabilizados, como sem armazenar mais de 1, 100, 500, 1000 ou 5000 quadros de vídeo não estabilizados em um vídeo que está sendo gravado atualmente ou que foi gravado). Consequentemente, o sistema pode não precisar esperar para estabilizar um vídeo até que o vídeo inteiro tenha sido gravado. As técnicas de estabilização de vídeo descritas podem ter baixa complexidade e, portanto, podem ser executadas em dispositivos com poder de processamento modesto (por exemplo, alguns telefones inteligentes). Além disso, as técnicas de estabilização de vídeo aqui descritas podem ser capazes de operar em situações em que a estimative de movimento quadro a quadro falha no primeiro passo.[016] Particular implementations may, in certain cases, realize one or more of the following advantages. The video stabilization techniques described here can compensate for motion in more than two degrees of freedom (e.g., more than just horizontal and vertical movement), for example, compensating for motion in eight degrees of freedom (e.g., aspects of translation, rotation aspects, zooming aspects, and non-rigid rolling shutter distortion). The video stabilization techniques described here may work as video is being captured by a device and may not require future frame information. In other words, video stabilization techniques may be able to use information from just past frames in stabilizing a more recently recorded frame, so that the system can store a stabilized video stream as the video stream is captured. (for example, without storing multiple frames of unstabilized video, such as without storing more than 1, 100, 500, 1000, or 5000 frames of unstabilized video in a video that is currently being recorded or has been recorded). Consequently, the system may not need to wait to stabilize a video until the entire video has been recorded. The described video stabilization techniques can be low in complexity and therefore can be performed on devices with modest processing power (eg some smart phones). Furthermore, the video stabilization techniques described here may be able to operate in situations where frame-by-frame motion estimation fails in the first step.

[017] Os detalhes de uma ou mais implementações são apresentados nos desenhos anexos e na descrição abaixo. Outras características, objetos e vantagens serão evidentes a partir da descrição e desenhos, e a partir das reivindicações.[017] Details of one or more implementations are shown in the attached drawings and in the description below. Other features, objects and advantages will be evident from the description and drawings, and from the claims.

DESCRIÇÃO DOS DESENHOSDESCRIPTION OF THE DRAWINGS

[018] A Figura 1 mostra um diagrama de um fluxo de vídeo que está sendo estabilizado por um processo de estabilização de vídeo.[018] Figure 1 shows a diagram of a video stream being stabilized by a video stabilization process.

[019] As Figuras 2A-2B mostram um fluxograma de um processo para estabilizar o vídeo.[019] Figures 2A-2B show a flowchart of a process to stabilize the video.

[020] A Figura 3 é um diagrama de blocos de dispositivos de computação que podem ser usados para implementar os sistemas e métodos descritos neste documento, como um cliente ou como servidor ou pluralidade de servidores.[020] Figure 3 is a block diagram of computing devices that can be used to implement the systems and methods described in this document, as a client or as a server or a plurality of servers.

[021] Símbolos de referência semelhantes nos vários desenhos indicam elementos semelhantes.[021] Similar reference symbols in the various drawings indicate similar elements.

DESCRIÇÃO DETALHADADETAILED DESCRIPTION

[022] Este documento geralmente descreve a estabilização de vídeo. A estabilização de vídeo pode ser realizada identificando uma transformação entre um quadro de vídeo recentemente recebido e um quadro previamente recebido de um vídeo (onde a transformação indica movimento da câmera em relação a uma cena a partir de quadro a quadro), modificando essa transformação com base em informações a partir de quadros passados, gerando uma segunda transformação com base na transformação e a transformação modificada, e aplicando a segunda transformação ao quadro atualmente recebido para gerar uma versão estabilizada do quadro atualmente recebido. Este processo é descrito geralmente em relação à Figura 1 e, em seguida, com maior detalhe em relação à Figura 2.[022] This document generally describes video stabilization. Video stabilization can be performed by identifying a transform between a newly received frame of video and a previously received frame of video (where the transform indicates movement of the camera relative to a scene from frame to frame), modifying this transform with based on information from past frames, generating a second transformation based on the transform and the modified transform, and applying the second transform to the currently received frame to generate a stabilized version of the currently received frame. This process is described generally with reference to Figure 1 and then in greater detail with reference to Figure 2.

[023] A Figura 1 mostra um diagrama de um fluxo de vídeo que está sendo estabilizado por um processo de estabilização de vídeo. A figura inclui três quadros de um vídeo 110a-c. Esses quadros podem ser sucessivos, de modo que o quadro 110b pode ser o quadro que foi imediatamente capturado depois que o quadro 110a foi capturado, e o quadro 110c pode ser o quadro que foi imediatamente capturado depois que o quadro 110b foi capturado. Este documento pode, ocasionalmente, referir-se a dois quadros de um vídeo como um primeiro quadro de um vídeo e um segundo quadro de um vídeo, mas a notação "primeiro" não significa necessariamente que o primeiro quadro seja o quadro inicial em todo o vídeo.[023] Figure 1 shows a diagram of a video stream being stabilized by a video stabilization process. The figure includes three frames from a video 110a-c. These frames can be successive, so that frame 110b can be the frame that was captured immediately after frame 110a was captured, and frame 110c can be the frame that was captured immediately after frame 110b was captured. This document may occasionally refer to two frames of a video as a first frame of a video and a second frame of a video, but the "first" notation does not necessarily mean that the first frame is the starting frame throughout the entire video.

[024] Os quadros 110a-c são mostrados posicionados entre ou perto das linhas 112a-b, que indicam uma posição das cenas representadas pelos quadros um em relação ao outro. As linhas são fornecidas nesta figura para mostrar que a câmera estava em movimento quando capturou os quadros 110a-c. Por exemplo, a câmera estava apontando mais para baixo quando capturou o quadro 110b do que quando capturou o quadro 110a e apontou mais para cima quando capturou o quadro 110c do que quando capturou os quadros 110a-b.[024] The frames 110a-c are shown positioned between or near the lines 112a-b, which indicate a position of the scenes represented by the frames in relation to each other. Lines are provided in this figure to show that the camera was moving when it captured frames 110a-c. For example, the camera was pointing further down when it captured frame 110b than it did when it captured frame 110a, and it was pointing further up when it captured frame 110c than it did when it captured frames 110a-b.

[025] Um sistema de computação identifica uma transformação matemática (caixa 120) que indica o movimento da câmera a partir do primeiro quadro 110b para o segundo quadro110c. A identificação pode ser realizada usando quadros 110b-c (como ilustrado pelas setas na figura), onde o quadro 110c pode ser o quadro capturado mais recentemente. Estes dois quadros 110b-c podem ser recebidos a partir de um sensor de câmera ou módulo de câmera que está ligado ao sistema de computação, ou podem ser recebidos de um dispositivo remoto que capturou os quadros de vídeo 110b-c. A identificação da transformação matemática pode incluir gerar a transformação matemática. A transformação matemática pode ser uma matriz de transformação de homografia, como descrito em detalhes adicionais em relação à caixa 210 nas Figuras 2A-B.[025] A computing system identifies a mathematical transformation (box 120) that indicates the movement of the camera from the first frame 110b to the second frame 110c. Identification can be performed using frames 110b-c (as illustrated by the arrows in the figure), where frame 110c can be the most recently captured frame. These two frames 110b-c may be received from a camera sensor or camera module that is connected to the computing system, or may be received from a remote device that has captured the video frames 110b-c. Identifying the math transformation can include generating the math transformation. The math transformation can be a homograph transformation matrix, as described in further detail with respect to box 210 in Figures 2A-B.

[026] Um sistema de computação cria uma transformação modificada (caixa 125) por modificar a transformação inicial (caixa 120) de modo que a transformação modificada (caixa 125) seja menos representativa do que a transformação inicial de movimento que começou recentemente. Por outras palavras, gerar a transformação modificada compreende a modificação da transformação inicial com base em informações de um ou mais quadros de vídeo anteriores ao primeiro e segundo quadros 110b-c. A transformação modificada pode ser uma versão filtrada passa-baixa da transformação inicial. Isso resulta em uma transformação matemática modificada (caixa 125) que é mais representativa do que a transformação inicial (caixa 120) de movimento que tem ocorrido durante um longo período de tempo, em contraste com o movimento que começou recentemente.[026] A computing system creates a modified transformation (box 125) by modifying the initial transformation (box 120) such that the modified transformation (box 125) is less representative than the initial motion transformation it just started. In other words, generating the modified transform comprises modifying the initial transform based on information from one or more video frames prior to the first and second frames 110b-c. The modified transformation can be a low-pass filtered version of the initial transformation. This results in a modified mathematical transformation (box 125) that is more representative than the initial transformation (box 120) of movement that has taken place over a long period of time, as opposed to movement that has recently started.

[027] Como exemplo, a transformação matemática modificada (caixa 125) pode representar mais fortemente um movimento de movimentação (“panning”) que vem ocorrendo por vários segundos do que uma oscilação que começou uma fração de um segundo atrás. A modificação da transformação dessa maneira leva em consideração quadros anteriores do vídeo, conforme ilustrado pelas setas da Figura 1 que apontam a partir dos quadros 110a-b para a caixa 122. Por exemplo, as transformações calculadas usando quadros anteriores podem ser usadas para identificar quais movimentos têm ocorrido por um período de tempo mais longo e quais movimentos começaram recentemente. Uma maneira de exemplo de usar quadros anteriores para calcular a transformação modificada pode ser aplicar um filtro passa-baixa à matriz de transformação de homografia, como descrito em detalhes adicionais em relação à caixa 220 nas Figuras 2A-B.[027] As an example, the modified mathematical transformation (box 125) may more strongly represent a panning motion that has been occurring for several seconds than an oscillation that started a fraction of a second ago. Modifying the transform in this way takes into account earlier frames of the video, as illustrated by the arrows in Figure 1 pointing from frames 110a-b to box 122. For example, transforms calculated using earlier frames can be used to identify which movements have been going on for a longer period of time and which movements have started recently. An exemplary way of using previous frames to compute the modified transformation might be to apply a low pass filter to the homograph transformation matrix, as described in further detail with respect to box 220 in Figures 2A-B.

[028] A caixa 130 mostra uma segunda transformação que é gerada a partir da transformação inicial (caixa 120) e a transformação modificada (caixa 125). A segunda transformação pode ser uma diferença entre a transformação inicial e a transformação modificada. Gerar a segunda transformação a partir da transformação inicial e a transformação modificada é descrito em detalhes adicionais em relação à caixa 230 nas Figuras 2A-B.[028] Box 130 shows a second transformation that is generated from the initial transformation (box 120) and the modified transformation (box 125). The second transform can be a difference between the initial transform and the modified transform. Generating the second transformation from the initial transformation and the modified transformation is described in further detail with respect to box 230 in Figures 2A-B.

[029] A caixa 132 mostra como um sistema de computação identifica uma distorção antecipada em uma versão estabilizada do segundo quadro 110c o que resultaria da aplicação da segunda transformação ao segundo quadro 110c, com base na diferença entre (i) uma quantidade de distorção na direção horizontal que resultaria da aplicação da segunda transformação matemática para o segundo quadro 110c, e (ii) uma quantidade de distorção na direção vertical que resultaria da aplicação da segunda transformação matemática no segundo quadro 110c. O cálculo da distorção antecipada é descrito em detalhes adicionais em relação à caixa 250 nas Figuras 2A-B.[029] Box 132 shows how a computing system identifies an early distortion in a stabilized version of the second frame 110c which would result from applying the second transformation to the second frame 110c, based on the difference between (i) an amount of distortion in the horizontal direction that would result from applying the second mathematical transformation to the second frame 110c, and (ii) an amount of distortion in the vertical direction that would result from applying the second mathematical transformation to the second frame 110c. The calculation of early distortion is described in further detail with respect to box 250 in Figures 2A-B.

[030] A caixa 134 mostra como um sistema de computação determina uma quantidade pela qual reduzir um efeito de estabilização que resulta da aplicação da segunda transformação matemática ao segundo quadro 110c, com base em um grau em que a distorção antecipada excede uma mudança de distorção aceitável. A mudança de distorção aceitável pode ser calculada usando múltiplos quadros do vídeo que precederam o segundo quadro 110c, conforme ilustrado pelas setas da Figura 1 que apontam a partir dos quadros 110a-b para a caixa 134. Como exemplo, a distorção em múltiplos quadros anteriores pode ser analisada, e se a distorção que resultaria da estabilização do quadro atual 110c desvia significativamente de uma quantidade pela qual a distorção está mudando de quadro a quadro, o sistema de computação pode reduzir a estabilização do quadro atual 110c para evitar que a distorção seja muito aparente para um visualizador do vídeo. A determinação da quantidade para reduzir a estabilização de vídeo é descrita em detalhes adicionais em relação às caixas 250 e 260 nas Figuras 2. A utilização pelo sistema de computação da quantidade determinada para reduzir a estabilização de vídeo pode incluir gerar uma segunda transformação modificada (caixa 140) usando a quantidade determinada.[030] Box 134 shows how a computing system determines an amount by which to reduce a stabilization effect that results from applying the second mathematical transformation to the second frame 110c, based on a degree to which the anticipated distortion exceeds a distortion change acceptable. The acceptable distortion shift can be calculated using multiple frames of video preceding the second frame 110c, as illustrated by the arrows in Figure 1 pointing from frames 110a-b to box 134. As an example, the distortion in multiple frames preceding can be analyzed, and if the distortion that would result from stabilizing the current frame 110c significantly deviates from an amount by which the distortion is changing from frame to frame, the computing system can reduce the stabilization of the current frame 110c to prevent the distortion from being very apparent to a viewer of the video. Determining the amount to reduce video stabilization is described in further detail with respect to boxes 250 and 260 in Figures 2. The computing system's use of the amount determined to reduce video stabilization may include generating a second modified transform (box 140) using the given amount.

[031] O sistema de computação gera a versão estabilizada do segundo quadro 110c (caixa 150) aplicando a segunda transformação modificada (caixa 140) ao segundo quadro 110c. Uma vez que a segunda transformação modificada (caixa 140) foi modificada com base na quantidade determinada para reduzir a estabilização, a geração do sistema de computação da versão estabilizada do segundo quadro (caixa 150) é considerada como tendo sido reduzida com base na quantidade determinada para reduzir o efeito de estabilização.[031] The computing system generates the stabilized version of the second frame 110c (box 150) by applying the second modified transformation (box 140) to the second frame 110c. Since the modified second transformation (box 140) has been modified by the determined amount to reduce the stabilization, the computing system's generation of the stabilized version of the second frame (box 150) is considered to have been reduced by the determined amount to reduce the stabilization effect.

[032] Em algumas implementações, a determinação da quantidade pela qual reduzir o efeito de estabilização é adicional ou alternativamente com base em uma determinada velocidade de movimento da câmera em relação à cena a partir do primeiro quadro 110b para o segundo quadro 110c excedendo uma alteração aceitável na velocidade da câmera com relação à cena. A alteração aceitável na velocidade da câmera pode ser calculada a partir de múltiplos quadros do vídeo que precederam o segundo quadro 110c, como descrito em maior detalhe em relação às caixas 240 e 260 nas Figuras 2A-B.[032] In some implementations, determining the amount by which to reduce the stabilization effect is additionally or alternatively based on a given speed of movement of the camera relative to the scene from the first frame 110b to the second frame 110c exceeding a change acceptable camera speed relative to the scene. The acceptable change in camera speed can be calculated from the multiple frames of video preceding the second frame 110c, as described in greater detail in relation to boxes 240 and 260 in Figures 2A-B.

[033] Em algumas implementações, gerar a versão estabilizada do segundo quadro inclui aplicar zoom em uma versão do segundo quadro que é gerada aplicando a segunda transformação matemática ao segundo quadro. O sistema de computação pode mudar uma região ampliada horizontalmente, verticalmente ou ambas para evitar que a região ampliada apresente uma região inválida que possa aparecer nas bordas do segundo quadro estabilizado. Fazer isso é descrito em maior detalhe em relação às caixas 280 e 290 nas Figuras 2A- B.[033] In some implementations, generating the stabilized version of the second frame includes zooming into a version of the second frame that is generated by applying the second math transformation to the second frame. The computing system can shift a zoomed region horizontally, vertically, or both to prevent the zoomed region from having an invalid region that might appear at the edges of the stabilized second frame. Doing so is described in greater detail in connection with boxes 280 and 290 in Figures 2A-B.

[034] As Figuras 2A-B mostram um fluxograma de um processo para estabilizar o vídeo. Este processo é representado pelas caixas 210 a 290, que são descritas abaixo. As operações descritas em associação com essas caixas podem não ter que ser realizadas na ordem abaixo ou mostradas nas Figuras 2A-B.[034] Figures 2A-B show a flowchart of a process to stabilize the video. This process is represented by boxes 210 to 290, which are described below. The operations described in association with these boxes may not have to be performed in the order below or shown in Figures 2A-B.

[035] Na caixa 210, o sistema de computação estima uma matriz que representa o movimento quadro a quadro ("H_interframe") usando dois quadros de vídeo como entrada. Essa matriz de movimento quadro a quadro pode ser uma matriz de transformação de homografia. Uma matriz de transformação de homografia pode ser uma matriz que pode representar o movimento de uma cena ou uma câmera que estava capturando uma cena entre dois quadros de um vídeo. Como exemplo, cada quadro de um vídeo pode exibir uma imagem bidimensional. Suponha que um primeiro quadro tenha tirado uma foto de um quadrado a partir de linha reta em frente ao quadrado, de modo que o quadrado tenha lados de igual comprimento com ângulos de noventa graus no quadro de vídeo (em outras palavras, parece quadrado). Suponha agora que a câmera foi movida para o lado (ou o próprio quadrado foi movido) de modo que um próximo quadro do vídeo exibisse o quadrado como distorcido com alguns lados mais longos do que outros e com ângulos que não tem noventa graus. A localização dos quatro pontos de canto do quadrado no primeiro quadro pode ser mapeada para a localização dos quatro pontos de canto no segundo quadro para identificar como a câmera ou cena mudou de um quadro para o próximo.[035] In box 210, the computing system estimates a matrix representing frame-by-frame motion ("H_interframe") using two video frames as input. This frame-by-frame motion matrix can be a homograph transformation matrix. A homograph transformation matrix could be a matrix that could represent the movement of a scene or a camera that was capturing a scene between two frames of a video. As an example, each frame of a video can display a two-dimensional image. Suppose a first frame took a picture of a square starting straight in front of the square, so the square has equal length sides at ninety degree angles in the video frame (in other words, it looks square). Suppose now that the camera was moved to the side (or the square itself was moved) so that the next frame of video shows the square as distorted with some sides longer than others and with angles that are not ninety degrees. The location of the square's four corner points in the first frame can be mapped to the location of the four corner points in the second frame to identify how the camera or scene has changed from one frame to the next.

[036] O mapeamento desses pontos de canto uns dos outros nos quadros pode ser usado para gerar uma matriz de transformação de homografia que representa o movimento do ponto de vista da câmera em relação à cena que está gravando. Dada essa matriz de transformação de homografia, um primeiro quadro pode ser usado com a matriz de transformação de homografia gerada para recriar o segundo quadro, por exemplo, movendo pixels no primeiro quadro para locais diferentes de acordo com métodos de transformação de homografia conhecidos.[036] The mapping of these corner points to each other in the frames can be used to generate a homograph transformation matrix that represents the movement from the camera's point of view in relation to the scene that is recording. Given this homography transformation matrix, a first frame can be used with the generated homography transformation matrix to recreate the second frame, for example moving pixels in the first frame to different locations according to known homography transformation methods.

[037] A matriz de transformação de homografia que é descrita acima pode representar não apenas o movimento de translação, mas também a rotação, o zoom e a distorção de obturador de rolamento não rígido. Desta forma, a aplicação da matriz de transformação de homografia pode ser usada para estabilizar o vídeo em relação ao movimento em oito graus de liberdade. Para comparar, alguns mecanismos de estabilização de vídeo apenas estabilizam as imagens para explicar o movimento translacional (por exemplo, movimento para cima/baixo e esquerda/direita).[037] The homograph transformation matrix that is described above can represent not only translational movement, but also rotation, zooming, and non-rigid rolling shutter distortion. In this way, the application of the homograph transformation matrix can be used to stabilize the video with respect to motion in eight degrees of freedom. To compare, some video stabilization engines only stabilize images to account for translational motion (eg up/down and left/right motion).

[038] A matriz de transformação de homografia descrita acima pode ser uma matriz de transformação de homografia 3x3, embora outros tipos de matrizes de homografia possam ser usados (e outras representações matemáticas de movimento a partir de um quadro para outro, mesmo se não uma matriz de homografia ou mesmo se não uma matriz, podem ser usadas). A matriz 3x3 (referida como H_interface) pode ser determinada da seguinte maneira. Primeiro, um sistema de computação encontra um conjunto de pontos de recurso (geralmente pontos de canto) na imagem atual, onde esses pontos são denotados [x’_i, y’_i], i = 1 ... N (N é o número de pontos de recurso). Em seguida, são encontrados os pontos de recurso correspondentes no quadro anterior, onde os pontos de recurso correspondentes são denotados [x_i, y_i]. Observe que os pontos são descritos como sendo no sistema de coordenadas GL (ou seja, os intervalos x e y de -1 a 1 e com o centro de quadro como origem). Se os pontos estão no sistema de coordenadas de pixels de imagem em que x varia de 0 para a largura da imagem e y varia de 0 para a altura da imagem, então os pontos podem ser transformados para o sistema de coordenadas GL ou a matriz resultante pode ser transformada para compensar.[038] The homography transformation matrix described above can be a 3x3 homography transformation matrix, although other types of homography matrices can be used (and other mathematical representations of movement from one frame to another, even if not a homography matrix or even if not a matrix can be used). The 3x3 matrix (referred to as H_interface) can be determined as follows. First, a computing system finds a set of feature points (usually corner points) in the current image, where these points are denoted [x'_i, y'_i], i = 1 ... N (N is the number resource points). Then the corresponding feature points are found in the previous frame, where the corresponding feature points are denoted [x_i, y_i]. Note that the points are described as being in the GL coordinate system (that is, the x and y ranges from -1 to 1 and with the frame center as the origin). If the points are in the image pixel coordinate system where x varies from 0 to the image width and y varies from 0 to the image height, then the points can be transformed to the GL coordinate system or the resulting matrix can be be transformed to compensate.

[039] A matriz acima descrita H_interframe é uma matriz 3x3 que contém 9 elementos: h1, h2, h3 •H_interframe = h4, h5, h6 h7, h8, h9 H_interfame é a matriz de transformação que transforma [x_i, y_i] em [x’_i, y’_i], conforme descrito abaixo. • z_i '* [x’_i, y’_i, 1]' = H_interframe * [x_i, y_i, 1]' [x’_i, y’_i, 1] 'é um vetor 3x1 que é a transposta do vetor [x’_i, y’_i, 1]. [x_i, y_i, 1]’ é um vetor 3x1 que é a transposta do vetor [x_i, y_i, 1]. z_i’ é um fator de escala.[039] The matrix described above H_interframe is a 3x3 matrix that contains 9 elements: h1, h2, h3 •H_interframe = h4, h5, h6 h7, h8, h9 H_interfame is the transformation matrix that transforms [x_i, y_i] into [ x'_i, y'_i], as described below. • z_i '* [x'_i, y'_i, 1]' = H_interframe * [x_i, y_i, 1]' [x'_i, y'_i, 1] 'is a 3x1 vector that is the transpose of vector [ x'_i, y'_i, 1]. [x_i, y_i, 1]' is a 3x1 vector which is the transpose of the vector [x_i, y_i, 1]. z_i' is a scale factor.

[040] Dado um conjunto de pontos de recurso correspondentes, um exemplo de algoritmo para estimar a matriz é descrito no seguinte livro de visão computacional no algoritmo 4.1 (página 91) e no algoritmo 4.6 (página 123): "Hartley, R., Zisserman, A.: Geometria de Vista Múltipla em Visão de Computador. Cambridge University Press (2000)," disponível em ftp://vista.eng.tau.ac.il/dropbox/aviad/Hartley,%20Zisserma n%20-%20Multiple%20View%20Geometry%20in%20Computer%20 Vision.pdf[040] Given a set of corresponding feature points, an example algorithm for estimating the matrix is described in the following computer vision book in Algorithm 4.1 (page 91) and Algorithm 4.6 (page 123): "Hartley, R., Zisserman, A.: Multiple View Geometry in Computer Vision. Cambridge University Press (2000)," available at ftp://vista.eng.tau.ac.il/dropbox/aviad/Hartley,%20Zisserma n%20- %20Multiple%20View%20Geometry%20in%20Computer%20 Vision.pdf

[041] Na caixa 220, o sistema de computação estima uma matriz de transformação passa-baixa (H_lowpass). A matriz de transformação passa-baixa pode ser combinada posteriormente com a matriz H_interframe para gerar uma nova matriz (H_compensation) que pode ser usada para remover os resultados do movimento involuntário de "alta frequência" da câmera de vídeo. Se o sistema tentou remover todo o movimento (em outras palavras, não fez a filtragem passa-baixa descrita aqui), o usuário pode não ser capaz de mover a câmera voluntariamente e fazer a cena descrita pelo vídeo também se mover. Como tal, os sistemas de computação geram a transformação passa-baixa para filtrar os movimentos de alta frequência. Os movimentos de alta frequência podem ser aqueles movimentos que são irregulares e que não são representados através de muitos quadros, como movimentos de ida e volta com um curto período. Pelo contrário, os movimentos de baixa frequência podem ser os movimentos que são representados através de vários quadros, como um usuário que movimenta (“panning”) uma câmera de vídeo por vários segundos.[041] In box 220, the computing system estimates a lowpass transformation matrix (H_lowpass). The low-pass transformation matrix can be further combined with the H_interframe matrix to generate a new matrix (H_compensation) that can be used to remove the results of unintentional "high frequency" video camera motion. If the system tried to remove all motion (in other words, it didn't do the low-pass filtering described here), the user might not be able to voluntarily move the camera and make the scene described by the video move as well. As such, computing systems generate low-pass transformation to filter out high-frequency motions. High frequency motions can be those motions that are irregular and not represented across many frames, such as back and forth motions with a short period. Conversely, low-frequency motions can be motions that are represented across multiple frames, such as a user panning a video camera for several seconds.

[042] Para realizar esta filtragem, o sistema de computação gera uma matriz de transformação passa-baixa (H_lowpass) que inclui valores ponderados para enfatizar os movimentos de baixa frequência que ocorreram em uma série de longos períodos. A matriz de transformação passa-baixa pode ser o resultado da aplicação de um filtro passa-baixa na matriz H_interframe. Cada elemento na matriz de transformação passa-baixa é gerado individualmente, em uma base elemento por elemento, a partir de (1) sua própria série temporal da matriz de transformação passa-baixa do quadro anterior, (2) a matriz H_interframe que representa o movimento entre o quadro anterior e quadro atual, e (3) uma relação de amortecimento que é especificada pelo usuário. Em outras palavras, os elementos na matriz que são ponderados com valores notáveis podem ser os elementos que representam o movimento que esteve presente na matriz H_interframe através de muitos quadros. A equação para gerar H_lowpass pode ser representada da seguinte maneira: • H_lowpass = H_previous_lowpass * transform_damping_ratio + H_interframe * (1 - transform_damping_ratio) Esta equação é um exemplo de um filtro de resposta de impulso infinito de dois toques.[042] To perform this filtering, the computing system generates a lowpass transformation matrix (H_lowpass) that includes weighted values to emphasize low-frequency movements that occurred over a series of long periods. The lowpass transformation matrix can be the result of applying a lowpass filter on the H_interframe matrix. Each element in the low-pass transformation matrix is generated individually, on an element-by-element basis, from (1) its own time series of the previous frame's low-pass transformation matrix, (2) the H_interframe matrix representing the motion between the previous frame and current frame, and (3) a smoothing ratio that is specified by the user. In other words, the elements in the matrix that are weighted with notable values could be the elements that represent motion that has been present in the H_interframe matrix through many frames. The equation to generate H_lowpass can be represented as follows: • H_lowpass = H_previous_lowpass * transform_damping_ratio + H_interframe * (1 - transform_damping_ratio) This equation is an example of a two-stroke infinite impulse response filter.

[043] Na caixa 230, o sistema de computação calcula uma matriz de transformação de compensação (H_compensation). A matriz de compensação pode ser uma combinação da matriz passa-baixa (H_lowpass) e da matriz de movimento quadro a quadro (H_interframe). A combinação dessas duas matrizes gera uma matriz (H_compensation) que é necessária para manter o movimento de um quadro para outro, mas apenas os movimentos que ocorreram por um período de tempo razoável, excluindo os recentes movimentos "involuntários". A matriz H_compensation pode representar a diferença de movimentos entre H_interfame e H_lowpass, de modo que enquanto H_lowpass poderia ser aplicado ao último quadro para gerar uma versão modificada do último quadro que representa os movimentos voluntários que ocorreram entre o último quadro para o quadro atual, H_compensation pode ser aplicada ao quadro atual para gerar uma versão modificada (e estabilizada) do quadro atual que representa os movimentos voluntários que ocorreram entre o último quadro e o quadro atual. Em linguagem grosseira, aplicando H_compensation, o quadro atual remove o movimento involuntário desse quadro. Especificamente, dada esta matriz H_compensation computada, o sistema deve poder pegar o quadro atual do vídeo, aplicar a matriz H_compensation a esse quadro com um processo de transformação, e obter um quadro recém- gerado semelhante ao quadro atual, mas que exclui qualquer movimento súbito e pequeno. Em outras palavras, o sistema tenta manter o quadro atual o mais próximo possível do último quadro, mas permite movimentos "voluntários" de longo prazo.[043] At box 230, the computing system calculates a compensation transformation matrix (H_compensation). The compensation matrix can be a combination of the lowpass matrix (H_lowpass) and the frame-by-frame motion matrix (H_interframe). Combining these two matrices generates a matrix (H_compensation) which is needed to keep the movement from one frame to another, but only the movements that have occurred for a reasonable amount of time, excluding recent "involuntary" movements. The H_compensation matrix can represent the difference in movements between H_interfame and H_lowpass, so while H_lowpass could be applied to the last frame to generate a modified version of the last frame that represents the voluntary movements that occurred between the last frame to the current frame, H_compensation can be applied to the current frame to generate a modified (and stabilized) version of the current frame that represents the voluntary movements that occurred between the last frame and the current frame. In coarse language, by applying H_compensation, the current frame removes involuntary motion from that frame. Specifically, given this computed H_compensation matrix, the system should be able to take the current video frame, apply the H_compensation matrix to that frame with a transform process, and get a newly generated frame similar to the current frame, but excluding any sudden motion. is small. In other words, the system tries to keep the current frame as close as possible to the last frame, but allow for long-term "voluntary" movements.

[044] A matriz de transformação de compensação pode ser gerada com a seguinte equação: • H_compensation = Normalizar (Normaliza (Normaliza (H_lowpass) * H_previous_compensation) * Inverte (H_interframe))[044] The compensation transformation matrix can be generated with the following equation: • H_compensation = Normalize (Normalizes (Normalizes (H_lowpass) * H_previous_compensation) * Inverts (H_interframe))

[045] A matriz H_previous_compensation é a matriz H_constrained_compensation que é calculada posteriormente neste processo, mas aquela que foi calculada para o quadro anterior. Inverte () é a operação inversa da matriz que é usada para gerar a versão original do último quadro ao inverter a transformação. A combinação da versão original do último quadro com a matriz de filtro passa-baixa permite os movimentos voluntários. Combinar com H_previous_compensation compensa o valor de compensação anterior.[045] The H_previous_compensation matrix is the H_constrained_compensation matrix that is calculated later in this process, but the one that was calculated for the previous frame. Invert() is the inverse matrix operation that is used to generate the original version of the last frame when inverting the transform. Combining the original version of the last frame with the low-pass filter matrix allows for voluntary movements. Combining with H_previous_compensation offsets the previous compensation value.

[046] Normaliza () é uma operação que normaliza a matriz 3x3 pelo seu segundo valor singular. O processo de normalização é realizado porque algumas das etapas do processo podem resultar em uma transformação que, por falta de palavras melhores, não teria muito sentido no mundo real. Como tal, um processo de normalização pode garantir que um resultado razoável seja obtido de cada etapa do processo. A normalização é realizada para cada etapa do processo, de modo que uma saída estranha de um passo não polua as etapas restantes do processo (por exemplo, imagine se a saída estranha forneceu um valor próximo de zero que puxasse a saída do resto das etapas para estar também próxima de zero). Por razões que são discutidas abaixo, o processamento adicional pode melhorar os resultados do processo de estabilização de vídeo.[046] Normalize() is an operation that normalizes the 3x3 matrix by its second singular value. The normalization process is performed because some of the steps in the process can result in a transformation that, for lack of better words, would not make much sense in the real world. As such, a normalization process can ensure that a reasonable result is obtained from each step of the process. Normalization is performed for each step of the process, so that a strange output from one step does not pollute the remaining steps of the process (for example, imagine if the strange output provided a value close to zero that pulled the output of the rest of the steps towards also be close to zero). For reasons that are discussed below, additional processing can improve the results of the video stabilization process.

[047] Na caixa 240, o sistema de computação calcula um valor de redução de velocidade. O valor de redução de velocidade pode ser um valor que é usado para determinar quanto reduzir a estabilização de vídeo quando a câmera se move muito rapidamente e a estabilização de vídeo torna-se indesejável porque o movimento quadro a quadro pode não ser confiável. Para calcular a quantidade pela qual a estabilização de vídeo pode ser reduzida, a velocidade de movimento entre quadros é inicialmente calculada. Neste exemplo, o sistema de computação gera a velocidade do centro do quadro. A velocidade na direção x é puxada do elemento da linha 1 coluna 3 na H_interframe da seguinte maneira (caixa 242): • speed_x = H_interframe [1, 3] * aspect_ratio A velocidade na direção y é puxada do elemento da linha 2, coluna 3 na matriz H_interframe, da seguinte forma (caixa 242): • speed_y = H_interframe [2, 3][047] In box 240, the computing system calculates a speed reduction value. The speed reduction value can be a value that is used to determine how much to reduce the video stabilization when the camera moves too quickly and the video stabilization becomes undesirable because frame-by-frame movement can be unreliable. To calculate the amount by which video stabilization can be reduced, the movement speed between frames is first calculated. In this example, the computing system generates the speed of the center of the frame. Velocity in x direction is pulled from element in row 1 column 3 in H_interframe as follows (box 242): • speed_x = H_interframe [1, 3] * aspect_ratio Velocity in y direction is pulled from element in row 2, column 3 into the H_interframe array, as follows (box 242): • speed_y = H_interframe [2, 3]

[048] O aspect_ratio descrito acima é o frame_width dividido pelo frame_height. Essas identificações de velocidade só podem explicar o movimento de translação entre dois quadros, mas a velocidade pode explicar a rotação, o zoom ou outros tipos de movimentos, em outros exemplos.[048] The aspect_ratio described above is the frame_width divided by the frame_height. These speed tags can only explain translational movement between two frames, but speed can explain rotation, zooming, or other types of movement in other examples.

[049] O sistema pode então determinar a velocidade do movimento passa-baixa que explica a velocidade a longo prazo da câmera (ou a cena) e exclui movimentos "involuntários" repentinos e rápidos. Isso é feito tomando a velocidade atual e combinando-a com a velocidade passa-baixa anteriormente calculada, e aplicando ainda uma razão de amortecimento que pesa inversamente a velocidade atual em relação à velocidade passa-baixa previamente calculada, por exemplo, da seguinte maneira: •lowpass_speed_x = lowpass_speed_x_previous * speed_damping_ratio + speed_x * (1 - speed_damping_ratio)[049] The system can then determine the speed of the low-pass movement that accounts for the long-term speed of the camera (or the scene) and excludes sudden and rapid "involuntary" movements. This is done by taking the current velocity and combining it with the previously calculated low-pass velocity, and further applying a damping ratio that inversely weighs the current velocity against the previously calculated low-pass velocity, for example, as follows: •lowpass_speed_x = lowpass_speed_x_previous * speed_damping_ratio + speed_x * (1 - speed_damping_ratio)

[050] Esta equação efetivamente gera uma velocidade passa-baixa, pegando a velocidade previamente calculada e reduzindo-a por uma quantidade que é especificada por uma taxa de amortecimento. A redução é compensada pela velocidade atual. Desta forma, a velocidade atual do vídeo afeta o valor de lowpass_speed geral, mas não é um fator exclusivo no valor de lowpass_speed. A equação acima representa um filtro de resposta de impulso infinito. O mesmo processo pode ser realizado para a velocidade y para gerar a velocidade de passa-baixa, por exemplo, da seguinte maneira: • lowpass_speed_y = lowpass_speed_y_previous * speed_damping_ratio + speed_y * (1 - speed_damping_ratio)[050] This equation effectively generates a low-pass velocity by taking the previously calculated velocity and reducing it by an amount that is specified by a damping ratio. The reduction is compensated for by the current speed. In this way, the current video speed affects the overall lowpass_speed value, but is not a unique factor in the lowpass_speed value. The above equation represents an infinite impulse response filter. The same process can be performed for velocity y to generate the lowpass velocity, for example as follows: • lowpass_speed_y = lowpass_speed_y_previous * speed_damping_ratio + speed_y * (1 - speed_damping_ratio)

[051] A relação de amortecimento neste processo é definida por um usuário, e um valor de exemplo é 0,99.[051] The damping ratio in this process is defined by a user, and an example value is 0.99.

[052] O processo então combina esses valores para gerar uma única representação da velocidade passa-baixa que explica o movimento nas direções x e y, por exemplo, usando a seguinte equação (caixa 244): • lowpass_speed = sqrt (lowpass_speed_x * lowpass_speed_x + lowpass_speed_y * lowpass_speed_y)[052] The process then combines these values to generate a single low-pass velocity representation that explains motion in the x and y directions, for example, using the following equation (box 244): • lowpass_speed = sqrt(lowpass_speed_x * lowpass_speed_x + lowpass_speed_y * lowpass_speed_y)

[053] Esta velocidade passa-baixa calculada representa essencialmente a velocidade de movimento a longo prazo entre os quadros. Em outras palavras, lowpass_speed conta menos para mudanças recentes na velocidade e pesa mais fortemente a tendência de velocidade a longo prazo.[053] This calculated low-pass speed essentially represents the long-term movement speed between frames. In other words, lowpass_speed counts less for recent changes in speed and weighs the long-term speed trend more heavily.

[054] Com a velocidade passa-baixa calculada, o sistema pode calcular o valor de redução de velocidade. Em alguns exemplos, o valor de redução de velocidade é um valor entre 0 e 1 (outros valores de limite são possíveis) e o sistema pode gerar o valor de redução de velocidade com base em como a velocidade passa-baixa se compara a um limiar baixo e um limiar alto. Se a velocidade passa-baixa estiver abaixo do limiar baixo, o valor de redução de velocidade pode ser ajustado para o valor limite 0. Se a velocidade passa-baixa estiver acima do limiar alto, o valor de redução de velocidade pode ser ajustado para o valor limite 1. Se a velocidade passa-baixa for entre os dois limiares, o sistema de computação pode selecionar um valor de redução de velocidade que represente o valor escalonado da velocidade passa-baixa entre os limiares, por exemplo, onde o valor de redução de velocidade situa-se entre os valores limites 0 e 1. O cálculo do valor de rejeição de velocidade pode ser representado com o seguinte algoritmo (caixa 246): • If lowpass_speed <low_speed_threshold, then speed_reduction = 0 • Else if lowpass_speed> high_speed_threshold, then speed_reduction = max_speed_reduction • Otherwise, speed_reduction = max_speed_reduction * (lowpass_speed - low_speed_threshold)/(high_speed_threshold - low_speed_threshold)[054] With the low-pass speed calculated, the system can calculate the speed reduction value. In some examples, the speed reduction value is a value between 0 and 1 (other threshold values are possible) and the system may generate the speed reduction value based on how the low-pass speed compares to a threshold low and a high threshold. If the low-pass speed is below the low threshold, the speed reduction value can be set to the threshold value 0. If the low-pass speed is above the high threshold, the speed reduction value can be set to the threshold value 1. If the low-pass speed is between the two thresholds, the computing system can select a speed reduction value that represents the scaled value of the low-pass speed between the thresholds, for example, where the reduction value value lies between the threshold values 0 and 1. The calculation of the speed rejection value can be represented with the following algorithm (box 246): • If lowpass_speed <low_speed_threshold, then speed_reduction = 0 • Else if lowpass_speed> high_speed_threshold, then speed_reduction = max_speed_reduction • Otherwise, speed_reduction = max_speed_reduction * (lowpass_speed - low_speed_threshold)/(high_speed_threshold - low_speed_threshold)

[055] Com este algoritmo, o low_speed_threshold, high_speed_threshold e max_speed_reduction são todos especificados pelo usuário. Os valores de exemplo incluem low_speed_threshold = 0,008; high_speed_threshold = 0,016; e max_speed_reduction = 1,0.[055] With this algorithm, the low_speed_threshold, high_speed_threshold and max_speed_reduction are all specified by the user. Example values include low_speed_threshold = 0.008; high_speed_threshold = 0.016; and max_speed_reduction = 1.0.

[056] Na caixa 250, o sistema de computação calcula um valor de redução de distorção. O sistema de computação pode calcular um valor de redução de distorção porque a transformada de compensação pode criar uma distorção muito rígida quando aplicada a um quadro de vídeo. Em outras palavras, a estabilização de vídeo pode não parecer ser realistas, por exemplo, porque a distorção causada por esticar a imagem em uma direção mais do que outra pode ocorrer muito rapidamente e poderia parecer incomum para um usuário.[056] At box 250, the computing system calculates a distortion reduction value. The computing system can calculate a distortion reduction value because the compensation transform can create very severe distortion when applied to a video frame. In other words, video stabilization may not appear to be realistic, for example, because distortion caused by stretching the image in one direction more than the other can occur very quickly and could appear unusual to a user.

[057] Para calcular o valor de redução de distorção, o sistema de computação pode primeiro calcular o fator de zoom de compensação, observando os valores dos fatores de zoom na matriz H_compensation, da seguinte forma: •zoom_x = H_compensation [1,1] que é o elemento da linha 1 coluna 1 na matriz de H_compensation • zoom_y = H_compensation [2,2] que é o elemento da linha 2 coluna 2 na matriz de H_compensation[057] To calculate the amount of distortion reduction, the computing system can first calculate the compensation zoom factor by looking at the values of the zoom factors in the H_compensation matrix, as follows: •zoom_x = H_compensation [1,1] which is the element from row 1 column 1 in the H_compensation matrix • zoom_y = H_compensation [2,2] which is the element from row 2 column 2 in the H_compensation matrix

[058] Os fatores de zoom podem ser os fatores que identificam como a transformação estica a imagem em uma dimensão.[058] The zoom factors can be the factors that identify how the transform stretches the image by one dimension.

[059] O sistema de computação pode então determinar a diferença entre os dois fatores de zoom, para determinar o grau em que a imagem está sendo distorcida, esticando mais em uma direção do que a outra, como segue (caixa 252): • distorção = abs (zoom_x - zoom_y)[059] The computing system can then determine the difference between the two zoom factors, to determine the degree to which the image is being distorted, stretching more in one direction than the other, as follows (box 252): • distortion = abs(zoom_x - zoom_y)

[060] Um filtro passa-baixa é aplicado à distorção, para colocar um limite na taxa em que a distorção é permitida e, portanto, para se certificar de que as alterações súbitas na distorção foram minimizadas, usando a seguinte fórmula (caixa 254): • lowpass_distortion = previous_lowpass_distortion * distortion_damping_ratio + distortion * (1 - distortion_damping_ratio)[060] A low-pass filter is applied to the distortion, to place a limit on the rate at which distortion is allowed, and therefore to make sure that sudden changes in distortion have been minimized, using the following formula (box 254) : • lowpass_distortion = previous_lowpass_distortion * distortion_damping_ratio + distortion * (1 - distortion_damping_ratio)

[061] Dito de outra forma, o algoritmo é organizado para permitir que a quantidade de distorção mude lentamente. Na fórmula acima, a distortion_damping_ratio é a taxa de amortecimento do filtro IIR de distorção que é especificada pelo usuário. Um valor de exemplo é 0,99.[061] Put another way, the algorithm is organized to allow the amount of distortion to change slowly. In the above formula, the distortion_damping_ratio is the damping ratio of the distortion IIR filter that is specified by the user. An example value is 0.99.

[062] Com a baixa distorção de passa-baixa calculada, o sistema de computação pode calcular o valor de redução de distorção. Em alguns exemplos, o valor de redução de distorção é um valor entre 0 e 1 (outros valores de limite são possíveis), e o sistema pode gerar o valor de redução de distorção com base em como a distorção de passa-baixa se compara a um limiar baixo e um limiar alto. Se a distorção de passa-baixa estiver abaixo do limiar baixo, o valor de redução de passa-baixa pode ser ajustado para o valor limite 0. Se o valor de distorção de passa-baixa estiver acima do limiar alto, o valor de redução de distorção pode ser ajustado para o valor limite 1. Se o valor de distorção de passa-baixa for entre os dois limiares, pode-se selecionar um valor que represente o valor escalonado da distorção baixa entre os limiares (por exemplo, onde o valor de redução de distorção resultante situa-se entre valores limite 0 e 1). O cálculo do valor de redução de distorção pode ser representado com o seguinte algoritmo (caixa 256): • If lowpass_distortion < low_distortion_threshold, then distortion reduction = 0 • Else if lowpass_distortion > high_distortion_threshold, então max_distortion_reduction • Otherwise, distortion_reduction = max_distortion_reduction * (lowpass_distortion - low_distortion_threshold)/(high_distortion_threshold - low_distortion_threshold)[062] With the low low-pass distortion calculated, the computing system can calculate the distortion reduction value. In some examples, the distortion reduction value is a value between 0 and 1 (other threshold values are possible), and the system may generate the distortion reduction value based on how the low-pass distortion compares to a low threshold and a high threshold. If the low-pass distortion is below the low threshold, the low-pass reduction value can be set to the threshold value 0. If the low-pass distortion value is above the high threshold, the low-pass reduction value distortion can be set to threshold value 1. If the low-pass distortion value is between the two thresholds, you can select a value that represents the scaled value of the low-pass distortion between the thresholds (for example, where the value of resulting distortion reduction lies between threshold values 0 and 1). The calculation of the distortion reduction value can be represented with the following algorithm (box 256): • If lowpass_distortion < low_distortion_threshold, then distortion reduction = 0 • Else if lowpass_distortion > high_distortion_threshold, then max_distortion_reduction • Otherwise, distortion_reduction = max_distortion_reduction * (lowpass_distortion - low_distortion_threshold)/(high_distortion_threshold - low_distortion_threshold)

[063] Com este algoritmo, low_distortion_threshold, high_distortion_threshold e max_distortion_reduction são todos especificados pelo usuário. Os valores de exemplo incluem low_distortion_threshold = 0,001, high_distortion_threshold = 0,01 e max_distortion_reduction = 0,3.[063] With this algorithm, low_distortion_threshold, high_distortion_threshold, and max_distortion_reduction are all user-specified. Example values include low_distortion_threshold = 0.001, high_distortion_threshold = 0.01, and max_distortion_reduction = 0.3.

[064] Na caixa 260, o sistema de computação reduz uma força da estabilização de vídeo com base no valor de redução de velocidade determinado e no valor de redução de distorção. Para fazer isso, o sistema de computação calcula um valor de redução, que neste exemplo é identificado como o máximo do valor de redução de velocidade e o valor de redução de distorção (caixa 262), da seguinte forma: • redução = max (speed_reduction, distortion_reduction)[064] In box 260, the computing system reduces a video stabilization strength based on the determined speed reduction value and the distortion reduction value. To do this, the computing system calculates a reduction value, which in this example is identified as the maximum of the speed reduction value and the distortion reduction value (box 262), as follows: • reduction = max (speed_reduction , distortion_reduction)

[065] Em outros exemplos, o valor de redução pode ser uma combinação destes dois valores que representam uma porção de cada valor (por exemplo, os valores podem ser adicionados ou multiplicados em conjunto e, possivelmente, multiplicados por um número predeterminado como 0,5). O valor de redução pode cair em ou entre os valores de limiar de 0 e 1, e quanto mais próximo do valor de redução for 1, mais o sistema de computação pode reduzir a força da estabilização de imagem.[065] In other examples, the reduction value can be a combination of these two values representing a portion of each value (for example, values can be added or multiplied together and possibly multiplied by a predetermined number such as 0, 5). The reduction value can fall at or between the threshold values of 0 and 1, and the closer the reduction value is to 1, the more the computing system can reduce the strength of the image stabilization.

[066] O sistema de computação pode então modificar a matriz de transformação de compensação para gerar uma matriz de transformação de compensação reduzida (caixa 264). O sistema de computação pode fazer isso multiplicando a matriz de transformação de compensação por uma subtração do valor de redução a partir de um. Em outras palavras, se o valor de redução for muito próximo de um (indicando que há uma grande redução na estabilização da imagem), os valores na matriz de compensação podem ser significativamente diminuídos porque eles seriam multiplicados por um número próximo de zero. Os números na matriz de transformação de compensação modificada são então adicionados a uma matriz de identidade que foi multiplicada pelo valor de redução. Um exemplo de equação segue: • H_reduced_compensation = Identidade * redução + H_compensation * (1 - redução)[066] The computing system can then modify the compensation transformation matrix to generate a reduced compensation transformation matrix (box 264). The computing system can do this by multiplying the offset transformation matrix by subtracting the offset value from one. In other words, if the reduction value is very close to one (indicating that there is a large reduction in image stabilization), the values in the compensation matrix could be significantly decreased because they would be multiplied by a number close to zero. The numbers in the modified compensation transformation matrix are then added to an identity matrix that has been multiplied by the reduction value. An example equation follows: • H_reduced_compensation = Identity * reduction + H_compensation * (1 - reduction)

[067] Na caixa 270, o sistema de computação pode restringir a compensação de modo que a estabilização de vídeo resultante não mostre regiões inválidas do quadro de saída (por exemplo, as regiões que estão fora do quadro). Como um pouco de fundo, porque a compensação pode deformar a imagem que resulta do processo de estabilização de imagem, essa imagem pode exibir regiões inválidas que estão essencialmente fora da imagem em suas bordas. Para garantir que essas regiões inválidas não sejam mostradas, o sistema de computação pode ampliar a imagem para cortar os lados da imagem que podem incluir as regiões inválidas.[067] In box 270, the computing system may constrain the compensation so that the resulting video stabilization does not show invalid regions of the output frame (eg, regions that are outside the frame). As a little background, because compensation can warp the image that results from the image stabilization process, this image can exhibit invalid regions that are essentially outside the image at its edges. To ensure that these invalid regions are not shown, the computing system can zoom in on the image to crop the sides of the image that may include the invalid regions.

[068] Voltando aos processos da caixa 270, se a câmera for movida de forma rápida e significativa, a estabilização pode bloquear a exibição de uma localização antiga porque o movimento rápido e significativo pode ser filtrado, o que pode introduzir as regiões inválidas acima descritas na exibição de um quadro estabilizado. Nesse caso, o processo de restrição abaixo descrito pode garantir que a estabilização de vídeo para essencialmente de controlar totalmente a região do quadro que é exibida se o vídeo estiver prestes a exibir uma região inválida. Esta determinação em relação a se a estabilização precisa desistir de algum controle do quadro pode começar por definir inicialmente os pontos de canto da imagem de saída e determinar se esses pontos de canto ficam fora de uma região de corte pré-especificada. Uma quantidade máxima de compensação e zoom pode ser definida como o dobro da razão de corte, onde a razão de corte pode ser especificada por um usuário (por exemplo, para ser 15% em cada lado, ou 0,15 na equação abaixo): • max_compensation = cropping_ratio * 2[068] Going back to the processes in box 270, if the camera is moved quickly and significantly, stabilization can block the display of an old location because rapid and significant movement can be filtered out, which can introduce the invalid regions described above in the display of a stabilized frame. In this case, the restriction process described below can ensure that video stabilization essentially stops completely controlling the region of the frame that is displayed if the video is about to display an invalid region. This determination as to whether the stabilization needs to give up some control of the frame can start by initially defining the corner points of the output image and determining whether those corner points fall outside a pre-specified crop region. A maximum amount of offset and zoom can be set to twice the crop ratio, where the crop ratio can be specified by a user (e.g. to be 15% on each side, or 0.15 in the equation below): • max_compensation = cropping_ratio * 2

[069] O sistema de computação pode então usar a matriz H_reduced_compensation para transformar os 4 cantos de uma unidade quadrada na coordenada GL (x01, y01) = (-1, -1), (x02, y02) = (1, -1), (x03 (x1, y0)) = (-1,1), (x04, y04) = (1, 1) para os 4 pontos de canto (x1, y1), (x2, y2), (x3, y3), (x4, y4). (Observe que o quadro de vídeo não precisa ser uma unidade quadrada, mas as dimensões da unidade de quadro são mapeadas para uma unidade quadrada na coordenada GL). Mais especificamente, usamos a seguinte fórmula para transformar (x0i, y0i) em (xi, yi): • dzi * [xi, yi, 1]’ = H_reduced_compensation * [x0i, y0i, 1]'[069] The computing system can then use the H_reduced_compensation matrix to transform the 4 corners of a unit square into the GL coordinate (x01, y01) = (-1, -1), (x02, y02) = (1, -1 ), (x03 (x1, y0)) = (-1,1), (x04, y04) = (1, 1) for the 4 corner points (x1, y1), (x2, y2), (x3, y3), (x4, y4). (Note that the video frame does not have to be a square unit, but the frame unit dimensions are mapped to a square unit in the GL coordinate). More specifically, we use the following formula to transform (x0i, y0i) into (xi, yi): • dzi * [xi, yi, 1]' = H_reduced_compensation * [x0i, y0i, 1]'

[070] Neste exemplo, [x0i, y0i, 1]’ é um vetor 3x1 que é a transposta do vetor [x0i, y0i, 1]. [xi, yi, 1]’ é um vetor 3x1 que é a transposta do vetor [xi, yi, 1]. zi é um fator de escala.[070] In this example, [x0i, y0i, 1]' is a 3x1 vector that is the transpose of vector [x0i, y0i, 1]. [xi, yi, 1]' is a 3x1 vector that is the transpose of the vector [xi, yi, 1]. zi is a scale factor.

[071] O sistema de computação pode então identificar a quantidade máxima de deslocamento em cada direção (esquerda, direita, para cima e para baixo) a partir dos cantos de cada quadro de vídeo transformado para a borda da unidade quadrada, da seguinte maneira: • max_left_displacement = 1 + max (x1, x3) • max_right_displacement = 1 - min (x2, x4) • max_top_displacement = 1 + max (y1, y2) • max_bottom_displacement = 1 - min (y3, y4)[071] The computing system can then identify the maximum amount of shift in each direction (left, right, up, and down) from the corners of each transformed video frame to the unit square edge, as follows: • max_left_displacement = 1 + max (x1, x3) • max_right_displacement = 1 - min (x2, x4) • max_top_displacement = 1 + max (y1, y2) • max_bottom_displacement = 1 - min (y3, y4)

[072] Se algum dos deslocamentos identificados exceder a quantidade máxima de compensação (que é o dobro da razão de corte como descrito acima e que indicaria que as regiões inválidas estão na região exibida da região ampliada da unidade quadrada), então os pontos de canto do quadro são deslocados por um mesmo valor longe a partir da borda da unidade quadrada, de modo que as regiões inválidas não serão exibidas. As equações para mudar os pontos de canto seguem em conformidade: • If max_left_displacement> max_compensation, desloque os 4 pontos de canto para a esquerda por max_left_displacement - max_compensation • If max_right_displacement> max_compensation, desloque os 4 pontos de canto para a direita por max_right_displacement - max_compensation • If max_top_displacement> max_compensation, desloque os 4 pontos de canto para cima por max_top_displacement - max_compensation • If max_bottom_displacement > max_compensation, desloque os 4 pontos de canto para baixo por max_bottom_displacement - max_compensation.[072] If any of the identified offsets exceed the maximum amount of offset (which is twice the crop ratio as described above and which would indicate that the invalid regions are in the displayed region of the magnified unit square region), then the corner points of the frame are shifted by the same amount away from the edge of the unit square, so invalid regions will not be displayed. The equations for shifting the corner points follow accordingly: • If max_left_displacement> max_compensation, shift the 4 corner points to the left by max_left_displacement - max_compensation • If max_right_displacement> max_compensation, shift the 4 corner points to the right by max_right_displacement - max_compensation • If max_top_displacement > max_compensation, shift the 4 corner points up by max_top_displacement - max_compensation • If max_bottom_displacement > max_compensation, shift the 4 corner points down by max_bottom_displacement - max_compensation.

[073] O deslocamento dos pontos de canto é uma identificação que regiões inválidas teriam sido mostradas, mesmo que a tela tenha sido cortada (caixa 272).[073] The offset of the corner points is an identification that invalid regions would have been shown, even if the screen had been cropped (box 272).

[074] Após todas as operações de deslocamento acima, os 4 novos pontos de canto podem ser denotados (x1', y1'), (x2', y2'), (x3', y3'), (x4', y4'). O sistema de computação então calcula a matriz de transformação de compensação restrita H_constrained_compensation, que mapeia os quatro cantos de um unidade quadrada na coordenada GL (x01, y01) = (-1, -1), (x02, y02) = (1, -1) (x03, y03) = (-1,1), (x04, y04) = (1,1) para os 4 pontos de canto restritos (x1’, y1'), (x2’, y2'), (x3’, y3'), (x4', y4’), da seguinte forma: • zi’ * [xi', yi’ , 1]' = H_constrained_compensation * [x0i, y0i, 1]’[074] After all the shift operations above, the 4 new corner points can be denoted (x1', y1'), (x2', y2'), (x3', y3'), (x4', y4' ). The computing system then computes the constrained compensation transformation matrix H_constrained_compensation, which maps the four corners of a unit square to the GL coordinate (x01, y01) = (-1, -1), (x02, y02) = (1, -1) (x03, y03) = (-1,1), (x04, y04) = (1,1) for the 4 constrained corner points (x1', y1'), (x2', y2'), (x3', y3'), (x4', y4'), as follows: • zi' * [xi', yi' , 1]' = H_constrained_compensation * [x0i, y0i, 1]'

[075] Neste exemplo, [x0i, y0i, 1]’ é um vetor 3x1 que é a transposta do vetor [x0i, y0i, 1]. [xi’, yi', 1]’ é um vetor 3x1 que é a transposta do vetor [xi', yi’ , 1]. zi’ é um fator de escala. Dado 4 pares de pontos [x0i, y0i, 1]’ e [xi', yi’, 1]', um exemplo de algoritmo para estimar a matriz é descrito no seguinte livro de visão de computador no algoritmo 4.1 (página 91): "Hartley, R., Zisserman, A.: Geometria de Vista Múltipla em Visão de Computador. Cambridge University Press (2000)," disponível em ftp://vista.eng.tau.ac.il/dropbox/aviad/Hartley,%20Zisserma n%20-%20Multiple%20View%20Geometry%20in%20Computer %20Vision.pdf[075] In this example, [x0i, y0i, 1]' is a 3x1 vector that is the transpose of vector [x0i, y0i, 1]. [xi', yi', 1]' is a 3x1 vector that is the transpose of the vector [xi', yi' , 1]. zi' is a scale factor. Given 4 pairs of points [x0i, y0i, 1]' and [xi', yi', 1]', an example algorithm for estimating the matrix is described in the following computer vision book on algorithm 4.1 (page 91): "Hartley, R., Zisserman, A.: Multiple View Geometry in Computer Vision. Cambridge University Press (2000)," available at ftp://vista.eng.tau.ac.il/dropbox/aviad/Hartley, %20Zisserma n%20-%20Multiple%20View%20Geometry%20in%20Computer %20Vision.pdf

[076] A H_constrained_compensation é então salva como H_previous_compensation, que pode ser usada em cálculos para estabilizar o próximo quadro, conforme descrito acima em relação à caixa 230.[076] The H_constrained_compensation is then saved as H_previous_compensation, which can be used in calculations to stabilize the next frame as described above regarding box 230.

[077] Na caixa 280, o sistema de computação modifica a matriz de compensação restrita para que a imagem estabilizada seja ampliada para cortar a borda. Em alguns exemplos, o sistema de computação primeiro identifica um fator de zoom da seguinte forma: • zoom_factor = 1/(1 - 2 * cropping_ratio)[077] At box 280, the computing system modifies the constrained compensation matrix so that the stabilized image is enlarged to crop the edge. In some examples, the computing system first identifies a zoom factor as follows: • zoom_factor = 1/(1 - 2 * cropping_ratio)

[078] Ao fazê-lo, o sistema de computação duplica a razão de corte (por exemplo, por duplicar o valor de 15% de 0,15 a 0,3), subtraindo o valor resultante de 1 (por exemplo, para obter 0,7) e, em seguida, dividindo 1 por esse resultado para obter o fator de zoom (por exemplo, 1 dividido por 0,7 para igualar um fator de zoom de 1,42). O sistema de computação pode, em seguida, dividir determinados recursos da matriz de compensação restrita para aumentar a quantidade de um modo, como segue: • H_constrained_compensation [3,1] = H_constrained_compensation [3,1]/zoom_factor • H_constrained_compensation [3,2] = H_constrained_compensation [3,2]/zoom_factor • H_constrained_compensation [3,3] = H_constrained_compensation [3,3]/zoom_factor[078] In doing so, the computing system doubles the cutoff ratio (for example, by doubling the 15% value from 0.15 to 0.3), subtracting the resulting value from 1 (for example, to obtain 0.7) and then dividing 1 by that result to get the zoom factor (for example, 1 divided by 0.7 to equal a zoom factor of 1.42). The computing system can then slice certain features out of the constrained compensation matrix to increase the amount one way, as follows: • H_constrained_compensation [3,1] = H_constrained_compensation [3,1]/zoom_factor • H_constrained_compensation [3,2 ] = H_constrained_compensation [3,2]/zoom_factor • H_constrained_compensation [3,3] = H_constrained_compensation [3,3]/zoom_factor

[079] Na caixa 290, o sistema de computação aplica a matriz de compensação restrita modificada ao quadro atual para gerar uma versão cortada e estabilizada do quadro atual. Uma maneira de exemplo de aplicar a matriz de compensação restrita (H_constrained_compensation) no quadro de entrada para produzir a imagem de saída pode ser descrita da seguinte forma. • z'* [x', y’, 1]' = H_constrained_compensation * [x, y, 1]’ • [x, y, 1]’ é um vetor 3x1 que representa uma coordenada no quadro de entrada • [x’, y', 1]’ é um vetor 3x1 que representa a coordenada no quadro de saída • z 'é um fator de escala • H_constrained_compensation é uma matriz 3x3 que contém 9 elementos: h1, h2, h3 • H_constrained_compensation = h4, h5, h6 h7, h8, h9[079] At box 290, the computing system applies the modified constrained offset matrix to the current frame to generate a cropped and stabilized version of the current frame. An example way of applying the constrained compensation matrix (H_constrained_compensation) on the input frame to produce the output image can be described as follows. • z'* [x', y', 1]' = H_constrained_compensation * [x, y, 1]' • [x, y, 1]' is a 3x1 vector representing a coordinate in the input frame • [x' , y', 1]' is a 3x1 vector representing the coordinate in the output frame • z 'is a scale factor • H_constrained_compensation is a 3x3 matrix containing 9 elements: h1, h2, h3 • H_constrained_compensation = h4, h5, h6 h7, h8, h9

[080] Em detalhes adicionais, para cada pixel [x, y] no quadro de entrada, encontre a posição [x’, y'] no quadro de saída usando a transformação acima, e copie o valor de pixel de [x, y] na entrada de quadro para [x’, y'] no quadro de saída. Outra maneira é para cada pixel [x’, y'] no quadro de saída, encontre a posição [x, y] no quadro de entrada usando a transformação inversa, e copie o valor do pixel de [x, y] na imagem de entrada para [x’, y'] no quadro de saída. Essas operações podem ser realizadas nos sistemas de computação Graphics Processing Unit (GPT) de forma eficiente.[080] In further detail, for each pixel [x, y] in the input frame, find the position [x', y'] in the output frame using the transform above, and copy the pixel value of [x, y ] in the input frame to [x', y'] in the output frame. Another way is for each pixel [x', y'] in the output frame, find the position [x, y] in the input frame using the inverse transform, and copy the pixel value of [x, y] into the image from input to [x', y'] in the output frame. These operations can be performed on Graphics Processing Unit (GPT) computing systems efficiently.

[081] O processo aqui descrito para as caixas 210 a 290 pode então ser repetido para o próximo quadro, com alguns dos valores a partir do processamento do quadro atual sendo usados para o próximo quadro.[081] The process described here for boxes 210 to 290 can then be repeated for the next frame, with some of the values from processing the current frame being used for the next frame.

[082] Em várias implementações, operações que são realizadas "em resposta a" ou "como consequência de" outra operação (por exemplo, uma determinação ou uma identificação) não são realizadas se a operação anterior não tiver êxito (por exemplo, se a determinação não foi realizada). As operações que são executadas "automaticamente" são operações que são executadas sem a intervenção do usuário (por exemplo, entrada de usuário intermediária). Os recursos neste documento que são descritos com linguagem condicional podem descrever implementações que são opcionais. Em alguns exemplos, "transmitir" de um primeiro dispositivo para um segundo dispositivo inclui o primeiro dispositivo colocando dados em uma rede para recepção pelo segundo dispositivo, mas pode não incluir o segundo dispositivo recebendo os dados. Por outro lado, "receber" de um primeiro dispositivo pode incluir receber os dados de uma rede, mas não pode incluir o primeiro dispositivo transmitindo os dados.[082] In many implementations, operations that are performed "in response to" or "as a consequence of" another operation (for example, a determination or an identification) are not performed if the previous operation is unsuccessful (for example, if the determination was not performed). Operations that run "automatically" are operations that run without user intervention (for example, intermediate user input). Features in this document that are described with conditional language may describe implementations that are optional. In some examples, "broadcast" from a first device to a second device includes the first device putting data onto a network for reception by the second device, but may not include the second device receiving the data. On the other hand, "receiving" from a first device can include receiving data from a network, but cannot include the first device transmitting the data.

[083] "Determinar" por um sistema de computação pode incluir o sistema de computação solicitando que outro dispositivo execute a determinação e forneça os resultados ao sistema de computação. Além disso, "exibir" ou "apresentar" por um sistema de computação pode incluir o sistema de computação enviando dados para fazer com que outro dispositivo exiba ou apresente as informações referentes.[083] "Determine" by a computing system may include the computing system requesting another device to perform the determination and provide the results to the computing system. In addition, "displaying" or "presenting" by a computing system may include the computing system sending data to cause another device to display or present the related information.

[084] Em várias implementações, operações que são descritas como sendo realizadas em uma matriz significam operações que são realizadas nessa matriz ou uma versão dessa matriz que foi modificada por uma operação descrita nesta divulgação ou um seu equivalente.[084] In various implementations, operations that are described as being performed on an array mean operations that are performed on that array or a version of that array that has been modified by an operation described in this disclosure or an equivalent thereof.

[085] A Figura 3 é um diagrama de blocos dos dispositivos de computação 300, 350 que podem ser usados para implementar os sistemas e métodos descritos neste documento, como um cliente ou como servidor ou pluralidade de servidores. O dispositivo de computação 300 destina-se a representar várias formas de computadores digitais, como laptops, desktops, estações de trabalho, assistentes digitais pessoais, servidores, servidores de lâmina, mainframes e outros computadores apropriados. O dispositivo de computação 350 destina-se a representar várias formas de dispositivos móveis, como assistentes digitais pessoais, telefones celulares, telefones inteligentes e outros dispositivos de computação similares. Os componentes aqui mostrados, suas conexões e relacionamentos, e suas funções, são apenas exemplos e não devem limitar implementações descritas e/ou reivindicadas neste documento.[085] Figure 3 is a block diagram of the computing devices 300, 350 that can be used to implement the systems and methods described in this document, as a client or as a server or a plurality of servers. Computing device 300 is intended to represent various forms of digital computers, such as laptops, desktops, workstations, personal digital assistants, servers, blade servers, mainframes, and other suitable computers. Computing device 350 is intended to represent various forms of mobile devices, such as personal digital assistants, cell phones, smart phones, and other similar computing devices. The components shown here, their connections and relationships, and their functions, are examples only and should not limit implementations described and/or claimed in this document.

[086] O dispositivo de computação 300 inclui um processador 302, memória 304, um dispositivo de armazenamento 306, uma interface de alta velocidade 308 que liga à memória 304 e portas de expansão de alta velocidade 310, e uma interface de baixa velocidade 312 que liga ao barramento de baixa velocidade 314 e ao dispositivo de armazenamento 306. Cada um dos componentes 302, 304, 306, 308, 310 e 312, estão interligados usando vários barramentos e podem ser montados em uma placa mãe comum ou de outras formas, conforme apropriado. O processador 302 pode processar instruções para execução dentro do dispositivo de computação 300, incluindo instruções armazenadas na memória 304 ou no dispositivo de armazenamento 306 para exibir informações gráficas para uma GUI em um dispositivo de entrada/saída externo, tal como a exibição 316 acoplada a uma velocidade de alta interface 308. Em outras implementações, vários processadores e/ou vários barramentos podem ser usados, conforme apropriado, juntamente com múltiplas memórias e tipos de memória. Além disso, vários dispositivos de computação 300 podem ser conectados, com cada dispositivo fornecendo porções das operações necessárias (por exemplo, como banco de servidores, um grupo de servidores de lâmina ou um sistema multiprocessador).[086] The computing device 300 includes a processor 302, memory 304, a storage device 306, a high-speed interface 308 that connects to memory 304 and high-speed expansion ports 310, and a low-speed interface 312 that connects to connects to the low-speed bus 314 and the storage device 306. Each of the components 302, 304, 306, 308, 310 and 312 are interconnected using various buses and can be mounted on a common motherboard or in other ways, as required. appropriate. Processor 302 may process instructions for execution within computing device 300, including instructions stored in memory 304 or storage device 306 to display graphical information for a GUI on an external input/output device, such as the display 316 coupled to a high-speed interface 308. In other implementations, multiple processors and/or multiple buses may be used, as appropriate, along with multiple memories and memory types. Furthermore, multiple computing devices 300 may be connected, with each device providing portions of the necessary operations (eg, as a bank of servers, a group of blade servers, or a multiprocessor system).

[087] A memória 304 armazena informação dentro do dispositivo de computação 300. Em uma implementação, a memória 304 é uma unidade ou unidades de memória voláteis. Em outra implementação, a memória 304 é uma unidade ou unidades de memória não voláteis. A memória 304 também pode ser outra forma de meio legível por computador, como um disco magnético ou óptico.[087] The memory 304 stores information within the computing device 300. In one implementation, the memory 304 is a volatile memory unit or units. In another implementation, memory 304 is a non-volatile memory unit or units. Memory 304 may also be another form of computer-readable medium, such as a magnetic or optical disk.

[088] O dispositivo de armazenamento 306 é capaz de fornecer armazenamento de massa para o dispositivo de computação 300. Em uma implementação, o dispositivo de armazenamento 306 pode ser ou conter um meio legível por computador, tal como um dispositivo de disquete, um dispositivo de disco rígido, um dispositivo de disco óptico, ou um dispositivo de fita, uma memória flash ou outro dispositivo de memória de estado sólido semelhante, ou uma série de dispositivos, incluindo dispositivos em uma rede de área de armazenamento ou outras configurações. Um produto de programa de computador pode ser tangivelmente incorporado em um transportador de informações. O produto de programa de computador também pode conter instruções que, quando executadas, executam um ou mais métodos, como os descritos acima. O transportador de informações é um meio legível por computador ou por máquina, como a memória 304, o dispositivo de armazenamento 306 ou a memória no processador 302.[088] Storage device 306 is capable of providing mass storage for computing device 300. In one implementation, storage device 306 may be or contain a computer-readable medium, such as a floppy disk device, a device hard disk drive, an optical disk device, or a tape device, a flash memory or other similar solid-state memory device, or a variety of devices, including devices in a storage area network or other configurations. A computer program product can be tangibly incorporated into an information carrier. The computer program product may also contain instructions that, when executed, perform one or more methods, such as those described above. The information carrier is a computer- or machine-readable medium, such as memory 304, storage device 306, or memory in processor 302.

[089] O controlador de alta velocidade 308 gerencia operações de uso intensivo de largura de banda para o dispositivo de computação 300, enquanto o controlador de baixa velocidade 312 gerencia operações de baixa intensidade de largura de banda. Essa alocação de funções é apenas um exemplo. Em uma implementação, o controlador de alta velocidade 308 é acoplado à memória 304, exibição 316 (por exemplo, através de um processador gráfico ou acelerador), e para portas de expansão de alta velocidade 310, que podem aceitar várias placas de expansão (não mostradas). Na implementação, o controlador de baixa velocidade 312 é acoplado ao dispositivo de armazenamento 306 e à porta de expansão de baixa velocidade 314. A porta de expansão de baixa velocidade, que pode incluir várias portas de comunicação (por exemplo, USB, Bluetooth, Ethernet, Ethernet sem fio), pode ser acoplada a um ou mais dispositivos de entrada/saída, como um teclado, um dispositivo apontador, um scanner ou um dispositivo de rede, como um comutador ou roteador, por exemplo, através de um adaptador de rede.[089] The high-speed controller 308 manages bandwidth-intensive operations for the computing device 300, while the low-speed controller 312 manages low-bandwidth-intensive operations. This allocation of roles is just an example. In one implementation, the high-speed controller 308 is coupled to memory 304, display 316 (e.g., via a graphics processor or accelerator), and to high-speed expansion ports 310, which can accept multiple expansion cards (not shown). In the implementation, the low-speed controller 312 is coupled to the storage device 306 and the low-speed expansion port 314. The low-speed expansion port, which may include various communication ports (e.g., USB, Bluetooth, Ethernet , wireless Ethernet), can be attached to one or more input/output devices such as a keyboard, pointing device, scanner or a network device such as a switch or router, for example via a network adapter .

[090] O dispositivo de computação 300 pode ser implementado em várias formas diferentes, como mostrado na figura. Por exemplo, pode ser implementado como um servidor padrão 320, ou múltiplos tempos em um grupo desses servidores. Também pode ser implementado como parte de um sistema de servidor de prateleira 324. Além disso, pode ser implementado em um computador pessoal, como um computador laptop 322. Alternativamente, componentes a partir do dispositivo de computação 300 podem ser combinados com outros componentes em um dispositivo móvel (não mostrado), tal como o dispositivo 350. Cada um desses dispositivos pode conter um ou mais dos dispositivos de computação 300, 350 e um sistema inteiro pode ser constituído por múltiplos dispositivos de computação 300, 350 que se comunicam um com o outro.[090] The computing device 300 can be implemented in several different ways, as shown in the figure. For example, it can be implemented as a standard 320 server, or multiple times in a group of these servers. It may also be implemented as part of an off-the-shelf server system 324. Furthermore, it may be implemented on a personal computer, such as a laptop computer 322. Alternatively, components from the computing device 300 may be combined with other components in a mobile device (not shown), such as device 350. Each of these devices can contain one or more of computing devices 300, 350, and an entire system can be comprised of multiple computing devices 300, 350 that communicate with each other. other.

[091] O dispositivo de computação 350 inclui um processador 352, memória 364, um dispositivo de entrada/saída tal como uma exibição 354, uma interface de comunicação 366, e um transceptor 368, entre outros componentes. O dispositivo 350 também pode ser provido com um dispositivo de armazenamento, tal como um microdrive ou outro dispositivo, para fornecer armazenamento adicional. Cada um dos componentes 350, 352, 364, 354, 366 e 368, está interligado usando vários barramentos, e vários dos componentes podem ser montados em uma placa-mãe comum ou de outras maneiras conforme apropriado.[091] The computing device 350 includes a processor 352, memory 364, an input/output device such as a display 354, a communication interface 366, and a transceiver 368, among other components. Device 350 may also be provided with a storage device, such as a microdrive or other device, to provide additional storage. Each of the components 350, 352, 364, 354, 366 and 368 is interconnected using various buses, and various of the components may be mounted on a common motherboard or in other ways as appropriate.

[092] O processador 352 pode executar instruções dentro do dispositivo de computação 350, incluindo instruções armazenadas na memória 364. O processador pode ser implementado como um chipset de chips que inclui processadores analógicos e digitais múltiplos e separados. Além disso, o processador pode ser implementado usando qualquer uma das várias arquiteturas. Por exemplo, o processador pode ser um processador CISC (Conjunto de Computadores de Instrução Complexa), um processador RISC (Conjunto de Computadores de Instrução Reduzida) ou um processador MISC (Conjunto de Computadores de Instrução Mínima). O processador pode fornecer, por exemplo, a coordenação dos outros componentes do dispositivo 350, como controle de interfaces de usuário, aplicações executadas pelo dispositivo 350, e comunicação sem fio pelo dispositivo 350.[092] The processor 352 can execute instructions within the computing device 350, including instructions stored in memory 364. The processor can be implemented as a chipset of chips that includes multiple and separate analog and digital processors. Furthermore, the processor can be implemented using any of several architectures. For example, the processor can be a CISC (Complex Instruction Computer Set) processor, a RISC (Reduced Instruction Computer Set) processor, or a Minimal Instruction Computer Set (MISC) processor. The processor may provide, for example, coordination of the other components of device 350, such as control of user interfaces, applications executed by device 350, and wireless communication by device 350.

[093] O processador 352 pode se comunicar com um usuário através da interface de controle 358 e a interface de exibição 356 acoplada a uma exibição 354. A exibição 354 pode ser, por exemplo, uma tela TFT (Tela de Cristal Líquido de Transistor de Filme fino) ou uma OLED (Diodo Emissor de Luz Orgânico), ou outra tecnologia de exibição apropriada. A interface de exibição 356 pode compreender circuitos apropriados para impulsionar a exibição 354 para apresentar informações gráficas e outras para um usuário. A interface de controle 358 pode receber comandos a partir de um usuário e convertê-los para submissão ao processador 352. Além disso, uma interface externa 362 pode fornecer em comunicação com o processador 352, de modo a permitir a comunicação de área próxima do dispositivo 350 com outros dispositivos. A interface externa 362 pode fornecer, por exemplo, comunicação com fio em algumas implementações, ou para comunicação sem fio em outras implementações, e várias interfaces também podem ser usadas.[093] The processor 352 can communicate with a user through the control interface 358 and the display interface 356 coupled to a display 354. The display 354 can be, for example, a TFT screen (Top Transistor Liquid Crystal Display) Thin Film) or an OLED (Organic Light Emitting Diode) or other appropriate display technology. Display interface 356 may comprise appropriate circuitry to drive display 354 to present graphical and other information to a user. The control interface 358 can receive commands from a user and convert them for submission to the processor 352. Additionally, an external interface 362 can provide in communication with the processor 352 so as to allow near area communication from the device. 350 with other devices. External interface 362 may provide, for example, for wired communication in some implementations, or for wireless communication in other implementations, and various interfaces may also be used.

[094] A memória 364 armazena informações dentro do dispositivo de computação 350. A memória 364 pode ser implementada como um ou mais de um meio ou meios legíveis por computador, uma unidade ou unidades de memória voláteis ou uma unidade ou unidades de memória não voláteis. A memória de expansão 374 também pode ser fornecida e conectada ao dispositivo 350 através da interface de expansão 372, que pode incluir, por exemplo, uma interface de cartão SIMM (Módulo de Memória Em Linha Único). Essa memória de expansão 374 pode proporcionar espaço de armazenamento extra para o dispositivo 350, ou também pode armazenar aplicações ou outras informações para o dispositivo 350. Especificamente, a memória de expansão 374 pode incluir instruções para realizar ou complementar os processos descritos acima e pode incluir informações seguras também. Assim, por exemplo, a memória de expansão 374 pode ser fornecida como um módulo de segurança para o dispositivo 350 e pode ser programada com instruções que permitem o uso seguro do dispositivo 350. Além disso, aplicações seguras podem ser fornecidas através dos cartões SIMM, juntamente com informações adicionais, como colocar informações de identificação no cartão SIMM de forma segura.[094] The memory 364 stores information within the computing device 350. The memory 364 may be implemented as one or more of a computer-readable medium or media, a volatile memory unit or units, or a non-volatile memory unit or units . Expansion memory 374 may also be provided and connected to device 350 through expansion interface 372, which may include, for example, a SIMM (Single In-Line Memory Module) card interface. Such expansion memory 374 can provide extra storage space for device 350, or it can also store applications or other information for device 350. Specifically, expansion memory 374 can include instructions for performing or supplementing the processes described above and can include secure information too. Thus, for example, expansion memory 374 can be provided as a security module for device 350 and can be programmed with instructions that allow secure use of device 350. In addition, secure applications can be provided via SIMM cards, along with additional information such as how to securely place identifying information on the SIMM card.

[095] A memória pode incluir, por exemplo, memória flash e/ou memória NVRAM, conforme discutido abaixo. Em uma implementação, um produto de programa de computador é tangencialmente incorporado em um transportador de informações. O produto de programa de computador contém instruções que, quando executadas, executam um ou mais métodos, como os descritos acima. O transportador de informações é um meio legível por computador ou por máquina, como a memória 364, a memória de expansão 374 ou a memória no processador 352 que pode ser recebido, por exemplo, através do transceptor 368 ou interface externa 362.[095] Memory may include, for example, flash memory and/or NVRAM memory, as discussed below. In one implementation, a computer program product is tangentially embedded in an information carrier. The computer program product contains instructions that, when executed, perform one or more methods as described above. The information carrier is a computer-readable or machine-readable medium, such as memory 364, expansion memory 374, or memory in processor 352 that may be received, for example, through transceiver 368 or external interface 362.

[096] O dispositivo 350 pode comunicar de maneira sem fio através da interface de comunicação 366, que pode incluir circuitos de processamento de sinal digital, quando necessário. A interface de comunicação 366 pode fornecer comunicações sob vários modos ou protocolos, tais como chamadas de voz GSM, SMS, EMS ou MMS, CDMA, TDMA, PDC, WCDMA, CDMA2000 ou GPRS, entre outros. Essa comunicação pode ocorrer, por exemplo, através do transceptor de radiofrequência 368. Além disso, pode ocorrer comunicação de curto alcance, como usar um Bluetooth, WiFi ou outro transceptor (não mostrado). Além disso, o módulo receptor 370 do GPS (Sistema de Posicionamento Global) pode fornecer dados sem fio adicionais relacionados à navegação e à localização ao dispositivo 350, que podem ser usados conforme apropriado por aplicações que funcionam no dispositivo 350.[096] The device 350 can communicate wirelessly through the communication interface 366, which can include digital signal processing circuitry, when necessary. Communication interface 366 can provide communications under various modes or protocols, such as GSM voice calls, SMS, EMS or MMS, CDMA, TDMA, PDC, WCDMA, CDMA2000 or GPRS, among others. Such communication may occur, for example, via radio frequency transceiver 368. In addition, short range communication may occur, such as using a Bluetooth, WiFi, or other transceiver (not shown). Additionally, GPS (Global Positioning System) receiver module 370 can provide additional wireless navigation and location related data to device 350 which can be used as appropriate by applications running on device 350.

[097] O dispositivo 350 também pode se comunicar de forma audível usando codec de áudio 360, que pode receber informações faladas a partir de um usuário e convertê-las em informações digitais utilizáveis. O codec de áudio 360 também pode gerar som audível para um usuário, como, por exemplo, através de um alto-falante, por exemplo, em um fone do dispositivo 350. Esse som pode incluir som de chamadas de voz, pode incluir som gravado (por exemplo, mensagens de voz, arquivos de música, etc) e também pode incluir o som gerado por aplicações que operam no dispositivo 350.[097] Device 350 may also communicate audibly using audio codec 360, which may receive spoken information from a user and convert it into usable digital information. Audio codec 360 may also generate sound that is audible to a user, such as through a loudspeaker, for example, in a device headset 350. This sound may include voice call sound, may include recorded sound (e.g., voice messages, music files, etc.) and may also include sound generated by applications operating on device 350.

[098] O dispositivo de computação 350 pode ser implementado de várias formas diferentes, como mostrado na figura. Por exemplo, pode ser implementado como um telefone celular 380. Também pode ser implementado como parte de um telefone inteligente 382, assistente digital pessoal ou outro dispositivo móvel similar.[098] The computing device 350 can be implemented in several different ways, as shown in the figure. For example, it may be implemented as a cell phone 380. It may also be implemented as part of a smart phone 382, personal digital assistant, or other similar mobile device.

[099] Além disso, o dispositivo de computação 300 ou 350 pode incluir unidades flash USB (Barramento Serial Universal). As unidades flash USB podem armazenar sistemas operacionais e outras aplicações. As unidades flash USB podem incluir componentes de entrada/saída, como um transmissor sem fio ou conector USB que pode ser inserido em uma porta USB de outro dispositivo de computação.[099] In addition, computing device 300 or 350 may include USB (Universal Serial Bus) flash drives. USB flash drives can store operating systems and other applications. USB flash drives can include input/output components such as a wireless transmitter or USB connector that can be inserted into a USB port on another computing device.

[100] Várias implementações dos sistemas e técnicas aqui descritas podem ser realizadas em circuitos eletrônicos digitais, circuitos integrados, ASICs especialmente concebidos (circuitos integrados de aplicação específica), hardware, firmware, software e/ou suas combinações. Estas várias implementações podem incluir a implementação em um ou mais programas de computador que são executáveis e/ou interpretáveis em um sistema programável incluindo pelo menos um processador programável, que pode ser de propósito geral ou especial, acoplado para receber dados e instruções de, e para transmitir dados e instruções para, um sistema de armazenamento, pelo menos um dispositivo de entrada e pelo menos um dispositivo de saída.[100] Various implementations of the systems and techniques described herein can be realized in digital electronic circuits, integrated circuits, specially designed ASICs (application-specific integrated circuits), hardware, firmware, software, and/or combinations thereof. These various implementations may include implementation in one or more computer programs that are executable and/or interpretable in a programmable system including at least one programmable processor, which may be general or special purpose, coupled to receive data and instructions from, and for transmitting data and instructions to, a storage system, at least one input device and at least one output device.

[101] Esses programas de computador (também conhecidos como programas, software, aplicações de software ou código) incluem instruções de máquina para um processador programável e podem ser implementados em uma linguagem de programação de alto nível processual e/ou orientada a objetos e/ou em língua de montagem/máquina. Conforme aqui utilizado, os termos "meio legível por máquina", "meio legível por computador", referem-se a qualquer produto de programa de computador, aparelho e/ou dispositivo (por exemplo, discos magnéticos, discos ópticos, memória, Dispositivos lógicos programáveis (PLD)) usados para fornecer instruções e/ou dados de máquina para um processador programável, incluindo um meio legível por máquina que recebe as instruções de máquina como um sinal legível por máquina. O termo "sinal legível por máquina" refere-se a qualquer sinal usado para fornecer instruções e/ou dados de máquina para um processador programável.[101] These computer programs (also known as programs, software, software applications, or code) include machine instructions for a programmable processor and may be implemented in a high-level procedural and/or object-oriented programming language and/ or in assembly/machine language. As used herein, the terms "machine-readable medium", "computer-readable medium", refer to any computer program product, apparatus and/or device (e.g., magnetic disks, optical disks, memory, logical devices (PLD)) used to provide machine instructions and/or data to a programmable processor, including a machine-readable medium that receives the machine instructions as a machine-readable signal. The term "machine-readable signal" refers to any signal used to provide machine instructions and/or data to a programmable processor.

[102] Para proporcionar interação com um usuário, os sistemas e técnicas aqui descritos podem ser implementados em um computador com um dispositivo de exibição (por exemplo, um monitor CRT (tubo de raios catódicos) ou LCD (monitor de cristal líquido) para exibir informações ao usuário e um teclado e um dispositivo apontador (por exemplo, um mouse ou um “trackball”) pelo qual o usuário pode fornecer entrada para o computador. Outros tipos de dispositivos podem ser usados para fornecer interação com um usuário também; por exemplo, o retorno fornecido ao usuário pode ser qualquer forma de retorno sensorial (por exemplo, retorno visual, retorno auditivo ou retorno tátil); e a entrada de usuário pode ser recebida de qualquer forma, incluindo entrada acústica, de fala ou tátil.[102] To provide interaction with a user, the systems and techniques described herein can be implemented on a computer with a display device (e.g., a CRT (cathode ray tube) monitor or LCD (liquid crystal display) to display information to the user and a keyboard and pointing device (for example, a mouse or a trackball) by which the user can provide input to the computer. Other types of devices can be used to provide interaction with a user as well; for example , the feedback provided to the user can be any form of sensory feedback (for example, visual feedback, auditory feedback, or haptic feedback); and user input can be received in any form, including acoustic, speech, or haptic input.

[103] Os sistemas e técnicas aqui descritos podem ser implementados em um sistema de computação que inclui um componente de terminal traseiro (por exemplo, como um servidor de dados), ou que inclui um componente de middleware (por exemplo, um servidor de aplicações), ou que inclui um componente de terminal frontal (por exemplo, um computador cliente com uma interface de usuário gráfica ou um navegador de internet através do qual um usuário pode interagir com uma implementação dos sistemas e técnicas descritos aqui), ou qualquer combinação desses componentes de terminal traseiro, middleware ou terminal frontal. Os componentes do sistema podem ser interligados por qualquer forma ou meio de comunicação de dados digitais (por exemplo, uma rede de comunicação). Exemplos de redes de comunicação incluem uma rede de área local ("LAN"), uma rede de área ampla ("WAN"), redes par a par (com membros ad hoc ou estáticos), infraestruturas de computação de grade, e a Internet.[103] The systems and techniques described here can be implemented on a computing system that includes a backend component (e.g., such as a data server), or that includes a middleware component (e.g., an application server). ), or that includes a front-end component (e.g., a client computer with a graphical user interface or a web browser through which a user can interact with an implementation of the systems and techniques described here), or any combination of these back-terminal, middleware, or front-terminal components. System components may be interconnected by any form or means of digital data communication (eg a communication network). Examples of communication networks include a local area network ("LAN"), a wide area network ("WAN"), peer-to-peer networks (with ad hoc or static members), grid computing infrastructures, and the Internet. .

[104] O sistema de computador pode incluir clientes e servidores. Um cliente e servidor geralmente são distantes uns dos outros e tipicamente interagem através de uma rede de comunicação. A relação de cliente e servidor surge em virtude de programas de computador executados nos respectivos computadores e tendo uma relação cliente- servidor um com o outro.[104] The computer system may include both clients and servers. A client and server are usually distant from each other and typically interact over a communication network. The client and server relationship arises by virtue of computer programs running on respective computers and having a client-server relationship with one another.

[105] Embora algumas implementações tenham sido descritas em detalhes acima, outras modificações são possíveis. Além disso, outros mecanismos para a realização dos sistemas e métodos descritos neste documento podem ser usados. Além disso, os fluxos lógicos representados nas figuras não requerem a ordem particular mostrada, ou a ordem sequencial, para obter resultados desejáveis. Podem ser fornecidas outras etapas, ou as etapas podem ser eliminadas, dos fluxos descritos, e outros componentes podem ser adicionados ou removidos dos sistemas descritos. Consequentemente, outras implementações estão dentro do escopo das seguintes reivindicações.[105] Although some implementations have been described in detail above, other modifications are possible. In addition, other mechanisms for realizing the systems and methods described in this document can be used. Furthermore, the logic flows depicted in the figures do not require the particular order shown, or the sequential order, to obtain desirable results. Other steps may be provided, or steps may be removed, from the described flows, and other components may be added or removed from the described systems. Accordingly, other implementations are within the scope of the following claims.

Claims (12)

1 . Método implementado por computador, CARACTERIZADO pelo fato de que compreende: receber, por um sistema de computação, primeiro e segundo quadros de um vídeo que foi capturado por uma câmera; identificar, pelo sistema de computação e usando o primeiro e segundo quadros do vídeo, uma transformação matemática que indica o movimento da câmera em relação a uma cena capturada pelo vídeo quando o primeiro quadro foi capturado para quando o segundo quadro foi capturado; gerar, pelo sistema de computação, uma transformação matemática modificada por modificar a transformação matemática para que a transformação matemática seja menos representativa do movimento que começou recentemente; gerar, pelo sistema de computação usando a transformação matemática e a transformação matemática modificada, uma segunda transformação matemática que pode ser aplicada ao segundo quadro para estabilizar o segundo quadro; identificar, pelo sistema de computação, uma distorção antecipada que estaria presente em uma versão estabilizada do segundo quadro resultante da aplicação da segunda transformação matemática ao segundo quadro, com base na diferença entre: (i) uma quantidade de distorção na direção horizontal resultante da aplicação da segunda transformação matemática para o segundo quadro; e (ii) uma quantidade de distorção na direção vertical resultante da aplicação da segunda transformação matemática para o segundo quadro; determinar, pelo sistema de computação, uma quantidade pela qual reduzir um efeito de estabilização que resulta da aplicação da segunda transformação matemática ao segundo quadro, com base em um grau em que a distorção antecipada excede uma mudança de distorção aceitável que foi calculada a partir da distorção em múltiplos quadros do vídeo que precederam o segundo quadro; e gerar, pelo sistema de computação, a versão estabilizada do segundo quadro aplicando a segunda transformação matemática para o segundo quadro, onde um efeito de estabilização da aplicação da segunda transformação matemática para o segundo quadro foi reduzido com base na quantidade determinada para a qual reduzir o efeito de estabilização, em que o segundo quadro é um quadro do vídeo que segue imediatamente o primeiro quadro do vídeo, em que a transformação matemática que indica o movimento da câmera inclui uma matriz de transformação de homografia, e em que a modificação da transformação matemática inclui a aplicação de um filtro passa-baixa para a matriz de transformação de homografia.1 . Computer-implemented method, CHARACTERIZED by the fact that it comprises: receiving, by a computer system, the first and second frames of a video that was captured by a camera; identify, by the computer system and using the first and second frames of the video, a mathematical transformation that indicates the movement of the camera in relation to a scene captured by the video when the first frame was captured to when the second frame was captured; generate, by the computer system, a modified mathematical transformation by modifying the mathematical transformation so that the mathematical transformation is less representative of the movement that has recently started; generating, by the computer system using the mathematical transformation and the modified mathematical transformation, a second mathematical transformation that can be applied to the second frame to stabilize the second frame; identify, by the computer system, an anticipated distortion that would be present in a stabilized version of the second frame resulting from applying the second mathematical transformation to the second frame, based on the difference between: (i) an amount of distortion in the horizontal direction resulting from the application from the second mathematical transformation to the second frame; and (ii) an amount of distortion in the vertical direction resulting from applying the second mathematical transformation to the second frame; determine, by the computer system, an amount by which to reduce a stabilization effect that results from applying the second mathematical transformation to the second frame, based on a degree to which the anticipated distortion exceeds an acceptable distortion change that has been calculated from the distortion in multiple video frames preceding the second frame; and generating, by the computer system, the stabilized version of the second frame by applying the second math transformation to the second frame, where a stabilization effect of applying the second math transformation to the second frame has been reduced based on the determined amount to reduce to the stabilization effect, where the second frame is a video frame that immediately follows the first video frame, where the mathematical transformation indicating camera movement includes a homograph transform matrix, and where the transformation modification Mathematics includes applying a low-pass filter to the homography transformation matrix. 2. Método implementado por computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que a distorção antecipada baseia-se em uma diferença entre um valor de esticar horizontal na segunda transformação matemática e um valor de esticar vertical na segunda transformação matemática.2. The computer-implemented method of claim 1, CHARACTERIZED by the fact that the anticipated distortion is based on a difference between a horizontal stretch value in the second mathematical transformation and a vertical stretching value in the second mathematical transformation. 3. Método implementado por computador, de acordo com a reivindicação 1, CARACTERI ZADO pelo fato de que o filtro passa-baixa é gerado de acordo com: I HJowpasS = H_previous_lüwpass * traπsform_damping_ratio + Hjntθrframe * (1 - transformjdamping_ratio) em que H_previous_lowpass é uma matriz de transformação passa-baixa do quadro anterior H, a matriz interframe representa o movimento entre o quadro anterior e o quadro atual e transform_damping_ratio é uma relação de amortecimento especificada.3. Computer-implemented method, according to claim 1, CHARACTERIZED by the fact that the low-pass filter is generated according to: I HJowpasS = H_previous_lüwpass * traπsform_damping_ratio + Hjntθrframe * (1 - transformjdamping_ratio) where H_previous_lowpass is a previous frame lowpass transform matrix H, the interframe matrix represents the movement between the previous frame and the current frame, and transform_damping_ratio is a specified damping ratio. 4. Método implementado por computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que a determinação do valor pelo qual reduzir o efeito de estabilização que resulta da aplicação da segunda transformação matemática para o segundo quadro é ainda com base em uma determinada velocidade de movimento da câmera a partir do primeiro quadro para o segundo quadro excedendo uma mudança aceitável da velocidade de movimento da câmera que foi calculada com base em uma velocidade de movimento da câmera entre os múltiplos quadros de vídeo que precederam o segundo quadro.4. Computer-implemented method, according to claim 1, CHARACTERIZED by the fact that the determination of the amount by which to reduce the stabilization effect that results from the application of the second mathematical transformation to the second frame is still based on a certain speed of camera movement from the first frame to the second frame exceeding an acceptable change in camera movement speed that was calculated based on a camera movement speed between the multiple frames of video that preceded the second frame. 5. Método implementado por computador, de acordo com a reivindicação 1, CARACTERIZADO pelo fato de que gerar a versão estabilizada do segundo quadro inclui aplicar zoom em uma versão do segundo quadro que foi gerado pela aplicação da segunda transformação matemática para o segundo quadro.5. Computer-implemented method according to claim 1, CHARACTERIZED by the fact that generating the stabilized version of the second frame includes zooming in on a version of the second frame that was generated by applying the second mathematical transformation to the second frame. 6. Método implementado por computador, de acordo com a reivindicação 5, CARACTERIZADO pelo fato de que compreende ainda deslocar uma região ampliada da versão do segundo quadro horizontalmente ou verticalmente para evitar a região ampliada do segundo quadro de apresentar uma região inválida.6. The computer-implemented method of claim 5, further comprising shifting an enlarged region of the second frame version horizontally or vertically to prevent the enlarged region of the second frame from displaying an invalid region. 7. Meio legível por computador não transitório, CARACTERIZADO pelo fato de que compreende instruções que, quando executadas por um computador, fazem com que o computador execute operações que incluem: receber, por um sistema de computação, primeiro e segundo quadros de um vídeo que foi capturado por uma câmera; identificar, pelo sistema de computação e utilizando o primeiro e segundo quadros do vídeo, uma transformação matemática que indica o movimento da câmera em relação a uma cena capturada pelo vídeo a partir de quando o primeiro quadro foi capturado para quando o segundo quadro foi capturado; gerar, pelo sistema de computação, uma transformação matemática modificada por modificar a transformação matemática, de modo que a transformação matemática é menos representativa de movimento que começou recentemente; gerar, pelo sistema de computação utilizando a transformação matemática e a transformação matemática modificada, uma segunda transformação matemática que é capaz de ser aplicada para o segundo quadro para estabilizar o segundo quadro; identificar, pelo sistema de computação, uma distorção antecipada que estaria presente em uma versão estabilizada do segundo quadro que resulta da aplicação da segunda transformação matemática para o segundo quadro, com base em uma diferença entre: (i) uma quantidade de distorção na direção horizontal resultante da aplicação da segunda transformação matemática para o segundo quadro; e (ii) uma quantidade de distorção na direção vertical que resulta da aplicação da segunda transformação matemática para o segundo quadro; determinar, pelo sistema de computação, uma quantidade pela qual reduzir um efeito de estabilização que resulta da aplicação da segunda transformação matemática para o segundo quadro, com base em um grau em que a distorção antecipada excede uma mudança de distorção aceitável que foi calculada a partir de distorção em múltiplos quadros do vídeo que precederam o segundo quadro; e gerar, pelo sistema de computação, a versão estabilizada do segundo quadro por aplicar a segunda transformação matemática para o segundo quadro, onde um efeito de estabilização de aplicar a segunda transformação matemática para o segundo quadro foi reduzido com base na quantidade determinada pelo qual reduzir o efeito de estabilização em que o segundo quadro é um quadro do vídeo que segue imediatamente ao primeiro quadro do vídeo, em que a transformação matemática que indica o movimento da câmera inclui uma matriz de transformação de homografia, e em que a modificação da transformação matemática inclui a aplicação de um filtro passa-baixa para a matriz de transformação de homografia.7. Non-transient computer-readable medium, CHARACTERIZED by the fact that it comprises instructions that, when executed by a computer, cause the computer to perform operations including: receiving, by a computer system, first and second frames of a video that was captured by a camera; identify, by the computer system and using the first and second frames of the video, a mathematical transformation that indicates the movement of the camera in relation to a scene captured by the video from when the first frame was captured to when the second frame was captured; generating, by the computer system, a modified mathematical transformation by modifying the mathematical transformation, such that the mathematical transformation is less representative of movement that has recently started; generating, by the computer system using the mathematical transformation and the modified mathematical transformation, a second mathematical transformation that is capable of being applied to the second frame to stabilize the second frame; identify, by the computer system, an anticipated distortion that would be present in a stabilized version of the second frame that results from applying the second mathematical transformation to the second frame, based on a difference between: (i) an amount of distortion in the horizontal direction resulting from applying the second mathematical transformation to the second frame; and (ii) an amount of distortion in the vertical direction that results from applying the second mathematical transformation to the second frame; determining, by the computer system, an amount by which to reduce a stabilization effect that results from applying the second mathematical transformation to the second frame, based on a degree to which the anticipated distortion exceeds an acceptable distortion change that has been calculated from of distortion in multiple video frames that preceded the second frame; and generating, by the computer system, the stabilized version of the second frame by applying the second mathematical transformation to the second frame, where a stabilization effect of applying the second mathematical transformation to the second frame has been reduced based on the determined amount by which to reduce the stabilization effect where the second frame is a video frame immediately following the first video frame, where the mathematical transformation indicating camera movement includes a homograph transform matrix, and where the mathematical transformation modification includes applying a low-pass filter to the homography transformation matrix. 8. Meio legível por computador, de acordo com a reivindicação 7, CARACTERIZADO pelo fato de que a distorção antecipada baseia-se em uma diferença entre um valor de zoom horizontal na segunda transformação matemática e um valor de zoom vertical na segunda transformação matemática.8. Computer-readable medium according to claim 7, CHARACTERIZED by the fact that the anticipated distortion is based on a difference between a horizontal zoom value in the second mathematical transformation and a vertical zoom value in the second mathematical transformation. 9. Meio legível por computador, de acordo com a reivindicação 7, CARACTERIZADO pelo fato de que a modificação da transformação matemática inclui modificar a transformação matemática de modo que a transformação matemática modificada é mais representativa do movimento que tenha ocorrido ao longo de um longo período de tempo do que a transformação matemática.9. Computer-readable medium according to claim 7, CHARACTERIZED by the fact that modifying the mathematical transformation includes modifying the mathematical transformation so that the modified mathematical transformation is more representative of motion that has occurred over a long period of time than the mathematical transformation. 10. Meio legível por computador, de acordo com a reivindicação 7, CARACTERI ZADO pelo fato de que a determinação da quantidade pela qual reduzir o efeito de estabilização que resulta da aplicação da segunda transformação matemática para o segundo quadro é ainda com base em uma determinada velocidade de movimento da câmera a partir do primeiro quadro para o segundo quadro excedendo uma mudança aceitável da velocidade de movimento da câmera que foi calculada com base em uma velocidade de movimento da câmera entre os múltiplos quadros do vídeo que precederam o segundo quadro.10. Computer-readable medium, according to claim 7, CHARACTERIZED by the fact that the determination of the amount by which to reduce the stabilization effect that results from the application of the second mathematical transformation to the second frame is still based on a certain camera movement speed from the first frame to the second frame exceeding an acceptable camera movement speed change that was calculated based on a camera movement speed between the multiple video frames that preceded the second frame. 11. Meio legível por computador, de acordo com a reivindicação 7, CARACTERIZADO pelo fato de que gerar a versão estabilizada do segundo quadro inclui aplicar zoom em uma versão do segundo quadro que foi gerada pela aplicação da segunda transformação matemática para o segundo quadro.11. Computer-readable medium according to claim 7, CHARACTERIZED by the fact that generating the stabilized version of the second frame includes zooming in on a version of the second frame that was generated by applying the second mathematical transformation to the second frame. 12. Meio legível por computador, de acordo com a reivindicação 11, CARACTERIZADO pelo fato de que as operações compreendem ainda deslocar uma região ampliada da versão do segundo quadro horizontalmente ou verticalmente para evitar a região ampliada do segundo quadro de apresentar uma região inválida.12. The computer-readable medium of claim 11, CHARACTERIZED in that the operations further comprise shifting an enlarged region of the second frame version horizontally or vertically to prevent the enlarged region of the second frame from displaying an invalid region.
BR112018000825-7A 2015-10-14 2016-09-23 METHOD IMPLEMENTED BY COMPUTER AND NON-TRANSITORY COMPUTER READABLE MEDIUM BR112018000825B1 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/883,515 2015-10-14
US14/883,515 US9967461B2 (en) 2015-10-14 2015-10-14 Stabilizing video using transformation matrices
PCT/US2016/053252 WO2017065952A1 (en) 2015-10-14 2016-09-23 Stabilizing video

Publications (2)

Publication Number Publication Date
BR112018000825A2 BR112018000825A2 (en) 2018-09-04
BR112018000825B1 true BR112018000825B1 (en) 2023-07-04

Family

ID=

Similar Documents

Publication Publication Date Title
US10986271B2 (en) Stabilizing video
JP5744217B2 (en) Method and system for processing video for stabilization and retargeting
US20240107163A1 (en) Multi-Camera Video Stabilization
US9591237B2 (en) Automated generation of panning shots
Nayar et al. Motion-based motion deblurring
WO2020143191A1 (en) Image frame prediction method, image frame prediction apparatus and head display apparatus
WO2014042894A1 (en) Methods and systems for removal of rolling shutter effects
CN105635588B (en) A kind of digital image stabilization method and device
Bell et al. A non-linear filter for gyroscope-based video stabilization
WO2020146911A2 (en) Multi-stage multi-reference bootstrapping for video super-resolution
Lee et al. Fast-rolling shutter compensation based on piecewise quadratic approximation of a camera trajectory
BR112018000825B1 (en) METHOD IMPLEMENTED BY COMPUTER AND NON-TRANSITORY COMPUTER READABLE MEDIUM
CN113891005B (en) Shooting method and device and electronic equipment
US11276145B2 (en) Seamless preview stitching for multiple cameras