Processamento de Imagens Visão Computacional Compressão Imagens Digitais Processamento de Imagens Visão Computacional Compressão
Modelos de uma Imagem Digital Físico Matemático Computacional
Matematicamente imagem é uma função Imagem em tons de cinza 0% 20% 40% 60% 80% 100% Níveis de cinza Posição ao longo da linha x u v L L(u,v) Função
Imagem colorida como uma função do R2 R3 v G R B
Imagem coloridas como 3 “canais” de cor B B(u,v) R(u,v) G(u,v) v v v u u u = + +
Processos que ocorrem na captura de uma imagem Amostragem, quantização e codificação
Aquisição de imagem numa camera fotográfica No plano de imagem a câmera tem um banco de sensores. Filtros controlam a cor que cada sensor amostra. Um padrão comum é o de Bayer, que privilegia o verde. Aquisição de imagem numa camera fotográfica A imagem comprimida e armazenada num formato mais eficiente (jpg ou png). Os mapas incompletos são reconstituídos e reamostrados (formato RAW). A imagem mixta é decomposta em tres canais incompletos.
Digitalização de Imagens Discretização espacial (amostragem)
quantizada e codificada Processos básicos 64x54 - floats Imagem amostrada amostragem Imagem de tons contínuos 64x54 - 256 tons Imagem amostrada e quantizada quantização 55 20 22 23 45 10 09 11 43 42 70 28 76 codificação 8*55, 1*20, 1*22, 1*23, …. Imagem amostrada, quantizada e codificada
Quantização Exposição (quantidade de luz) Níveis
Seis fotos da mesma cena com variação do tempo de abertura da câmera
Imagem resultante de um algoritmo de HDRI
Razões de lados e resolução típicas 16:10 1920×1200 ou 1280×800 16:9 1920×1080 (HDTV) ou 1600×900 ou 4:3 1024×768 ou 800×600 ou 640×480
Amostragem e reconstrução 1D
Áudio (Sinal 1D)
Amostragem 𝑓(𝑥) 𝑥 𝑓(𝑥) 𝑥
𝑓(𝑥) 𝑥 𝑓 𝑥 = 𝑖 𝑓 𝑖 ℎ 𝑖 (𝑥) ℎ(𝑥) ℎ 𝑖 (𝑥) 𝑥 i-2 i-1 i i+1 i+2
ℎ 𝑘 (𝑥)𝑓 𝑥 𝑑𝑥= ℎ 𝑘 (𝑥) 𝑖 𝑓 𝑖 ℎ 𝑖 (𝑥) 𝑑𝑥= 𝑖 𝑓 𝑖 ℎ 𝑘 (𝑥) ℎ 𝑖 (𝑥)𝑑𝑥 𝑓 𝑥 = 𝑖 𝑓 𝑖 ℎ 𝑖 (𝑥) ℎ 𝑘 (𝑥)𝑓 𝑥 𝑑𝑥= ℎ 𝑘 (𝑥) 𝑖 𝑓 𝑖 ℎ 𝑖 (𝑥) 𝑑𝑥= 𝑖 𝑓 𝑖 ℎ 𝑘 (𝑥) ℎ 𝑖 (𝑥)𝑑𝑥 i-2 i-1 i i+1 i+2 ℎ(𝑥) 𝑥 ℎ 𝑖 (𝑥) ℎ 𝑘 𝑥 ℎ 𝑖 𝑥 𝑑𝑥= &0, 𝑠𝑒 𝑖≠𝑗 &𝑖, 𝑠𝑒 𝑖=𝑗 𝑓 𝑘 = 𝑓 𝑥 ℎ 𝑘 (𝑥) 𝑑𝑥 = 𝑘 𝑘+1 𝑓 𝑥 𝑑𝑥
ℎ(𝑥) 𝑥 ℎ(𝑥) 𝑥 ℎ(𝑥) 𝑥 i-2 i-1 i i+1 i+2 i-3 i-2 i-1 i i+1 i+2 i+3 i-4
Amostragem, quantização e codificação de f(x)
Amostragem, quantização e codificação de f(x) partição do eixo x
Amostragem, quantização e codificação de f(x) 1 2 3 4 5 6 x f(x) amostra quantizada partição do eixo y 𝑓 𝑖 =(3,4,5,5,4,2,2,3,5,5,4,2)
Amostragem, quantização e codificação de f(x) 1 2 3 4 5 6 x f(x) função reconstruída 𝑓 (𝑥)
Amostragem mínima f(x)
Fourier 𝑓 𝑥 = 𝑎 0 + 𝑘=1 ∞ ( 𝑎 𝑘 cos 2𝜋𝑘𝑥 𝑛 + 𝑏 𝑘 sin 2𝜋𝑘𝑥 𝑛 ) onde: Jean Baptiste Joseph Fourier (1768-1830) Paper de 1807 para o Institut de France 𝑓 𝑥 = 𝑎 0 + 𝑘=1 ∞ ( 𝑎 𝑘 cos 2𝜋𝑘𝑥 𝑛 + 𝑏 𝑘 sin 2𝜋𝑘𝑥 𝑛 ) onde: 𝑎 0 = 1 𝑛 𝑓(𝑥)𝑑𝑥 𝑎 𝑘 = 1 𝑛 𝑓(𝑥)𝑐𝑜𝑠 2𝜋𝑘𝑥 𝑛 𝑑𝑥 𝑏 𝑘 = 1 𝑛 𝑓(𝑥)𝑠𝑖𝑛 2𝜋𝑘𝑥 𝑛 𝑑𝑥
Funções seno e cosseno
Domínios de amostragem de um sinal f(x) tempo ou espaço x n ak ∆𝜔= 2𝜋 𝑛 w bk freqüencia w
Transformada de Fourier 1 2 3 4 5 6 N-1
onde: onde:
Base de Haar ℎ 0 (𝑥) +1 𝑥 ℎ 1 (𝑥) +1 𝑥 −1
ℎ 2 (𝑥) + 2 𝑥 − 2 ℎ 3 (𝑥) + 2 𝑥 − 2
ℎ 4 (𝑥) +2 𝑥 −2 ℎ 5 (𝑥) +2 𝑥 −2
ℎ 6 (𝑥) +2 𝑥 −2 ℎ 7 (𝑥) +2 𝑥 −2
Transformada Haar 𝑓 1 𝑓 2 𝑓 3 𝑓 4 ……………………….. 𝑓 2 𝑛 −1 𝑓 2 𝑛 ……. ……. 𝑓 2 𝑛 −1 𝑓 2 𝑛 ……. ……. 𝑓 1 + 𝑓 2 2 𝑓 3 + 𝑓 4 2 𝑓 2 𝑛 −1 + 𝑓 2 𝑛 2 𝑓 1 − 𝑓 2 2 𝑓 3 − 𝑓 4 2 𝑓 2 𝑛 −1 − 𝑓 2 𝑛 2 Coeficientes de aproximação Coeficientes de detalhes
Exemplo de transformada Haar 10 4 6 12 8 4 2 6 7 9 6 4 3 -3 2 -2 8 5 -1 1 3 -3 2 -2 6,5 1,5 -1 1 3 -3 2 -2 três iterações de Haar sobre um vetor
Inversa Transformada de Haar Coeficientes de aproximação Coeficientes de detalhes 𝐴 1 𝐴 2 𝐴 2 𝑛 −1 𝐷 1 𝐷 2 𝐷 2 𝑛 −1 ……. ……. … 𝐴 1 + 𝐷 1 𝐴 1 − 𝐷 1 𝐴 2 + 𝐷 2 𝐴 2 − 𝐷 2 𝐴 2 𝑛 −1 + 𝐷 2 𝑛 −1 𝐴 2 𝑛 −1 − 𝐷 2 𝑛 −1
Uma iteração da transformada de Haar sobre uma matriz Transformada Haar Aplicando a transformada de Haar na horizontal Aplicando a transformada de Haar na vertical Matriz resultante Uma iteração da transformada de Haar sobre uma matriz
Duas iterações da Transformada de Haar
Processamento inicial: redução de ruídos Ruídos gaussianos e impulsivo (sal e pimenta)
Imagem Digital 25/11/2017 Redução de ruídos Dada uma imagem I com um ruído n, reduza n o máximo que puder (preferencialmente elimine n completamente) sem alterar significativamente I. 20 dB significam Marcelo Gattass
Dois tipos básicos de ruídos Imagem Digital 25/11/2017 Dois tipos básicos de ruídos Ruído impulsivo: causado por erro de transmissão, CCDs defeituosos, etc... Também chamado de pico e de sal e pimenta. são v.a. uniformemente distribuídas imin, imax, e l são parâmetos de controle da quantidade de ruídos. Marcelo Gattass
Dois tipos básicos de ruídos Imagem Digital 25/11/2017 Dois tipos básicos de ruídos Ruído Gaussiano branco : processo estocástico de média zero, independente do tempo e dos espaço. é o mesmo processo estocástico que não varia no tempo. é uma variável aleatória com a distribuição: Marcelo Gattass
Exemplo de ruído Gaussiano (=5) e Impulsivo ( =0.99) Imagem Digital 25/11/2017 Exemplo de ruído Gaussiano (=5) e Impulsivo ( =0.99) Marcelo Gattass
Imagem Digital 25/11/2017 Marcelo Gattass
Imagem com ruído impulsivo Imagem Digital 25/11/2017 Imagem com ruído impulsivo Uso da mediana para reduzir o ruído 223 204 171 120 18 50 116 138 97 187 242 172 179 167 235 76 175 123 214 114 143 232 198 203 205 Ωij Iij = mediana Ωij = 120 Marcelo Gattass
Sinal com ruído gaussiano Imagem Digital 25/11/2017 Sinal com ruído gaussiano Marcelo Gattass
Imagem Digital 25/11/2017 Suavização f h Marcelo Gattass
Imagem Digital Filtragem Gaussiana 25/11/2017 Marcelo Gattass
Imagem Digital 25/11/2017 Mascara ou Filtro ou: Marcelo Gattass
Imagem Digital 25/11/2017 Convolução Marcelo Gattass
Convolution Pictorially f(x) h(x)
Convolution h(t-x) f(t) x
Convolution Consider the function (box filter):
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This function windows our function f(x). f(t)
Convolution This particular convolution smooths out some of the high frequencies in f(x). f(t) f(x)g(x)
Ilustação da convolução Imagem Digital 25/11/2017 Ilustação da convolução Marcelo Gattass
Ilustração da convolução Imagem Digital 25/11/2017 Ilustração da convolução Marcelo Gattass
Discretização da Gaussiana 1D Imagem Digital 25/11/2017 Discretização da Gaussiana 1D 0.3 0.2 0.1 -4 -3 -2 -1 1 2 3 4 Marcelo Gattass
Discretização da Gaussiana 2D Imagem Digital 25/11/2017 Discretização da Gaussiana 2D Marcelo Gattass
Convolução com máscara
Separabilidade do filtro gaussiano Imagem Digital 25/11/2017 Separabilidade do filtro gaussiano 207 247 38 131 62 90 129 234 231 211 175 44 1 26 236 58 75 128 112 210 141 125 168 130 117 129 125 90 88 93 92 185 113 84 93 145 207 151 66 18 107 111 154 140 130 130 117 129 125 90 88 93 92 Marcelo Gattass
Imagem filtrada com um filtro passa baixa Imagem Digital 25/11/2017 Imagem filtrada com um filtro passa baixa Marcelo Gattass
Imagem Digital 25/11/2017 Arestas e cantos Locais de mudanças significativas na intensidade da imagem Marcelo Gattass
Edgedels = edge elements Imagem Digital 25/11/2017 Edgedels = edge elements Marcelo Gattass
Tipos de arestas degrau (step) rampa (ramp) cume (roof) Imagem Digital 25/11/2017 Tipos de arestas degrau (step) rampa (ramp) cume (roof) impulso (spike) Marcelo Gattass
Imagem Digital 25/11/2017 Gráfico sem e com ruído Marcelo Gattass
Derivadas e arestas f(x) f(x)+n(x) | f'(x)+n'(x) | f"(x)+n"(x) Imagem Digital 25/11/2017 Derivadas e arestas f(x) f(x)+n(x) | f'(x)+n'(x) | f"(x)+n"(x) Marcelo Gattass
Série de Taylor Com x=1, f(x)=fi e f(x+x)=fi+1 Imagem Digital 25/11/2017 Série de Taylor Com x=1, f(x)=fi e f(x+x)=fi+1 (a) Com x=-1, f(x)=fi e f(x+x)=fi-1 (b) Marcelo Gattass
Aproximações para derivadas Imagem Digital 25/11/2017 Aproximações para derivadas f(x) x fi-1 fi fi+1 i+1 i i-1 (a-b) (a+b) Marcelo Gattass
Em 2D Gradiente Laplaciano Convolution Kernels Imagem Digital 25/11/2017 Em 2D Gradiente Convolution Kernels Laplaciano Marcelo Gattass
Finite differences Khurram Hassan-Shafique Imagem Digital 25/11/2017 Now the figure on the right is signed; darker is negative, lighter is positive, and mid grey is zero. I always ask 1) which derivative (y or x) is this? 2) Have I got the sign of the kernel right? (i.e. is it d/dx or -d/dx). Khurram Hassan-Shafique Marcelo Gattass
Classical Operators Prewitt’s Operator Differentiate Smooth Imagem Digital 25/11/2017 Classical Operators Prewitt’s Operator Differentiate Smooth Khurram Hassan-Shafique Marcelo Gattass
Classical Operators Sobel’s Operator Differentiate Smooth Imagem Digital 25/11/2017 Classical Operators Sobel’s Operator Differentiate Smooth Khurram Hassan-Shafique Marcelo Gattass
Detecting Edges in Image Imagem Digital 25/11/2017 Detecting Edges in Image Sobel Edge Detector Edges Threshold Image I Khurram Hassan-Shafique Marcelo Gattass
Sobel Edge Detector Khurram Hassan-Shafique Imagem Digital 25/11/2017 Marcelo Gattass
Sobel Edge Detector Khurram Hassan-Shafique Imagem Digital 25/11/2017 Marcelo Gattass
Filtros de realce de bordas Imagem Digital 25/11/2017 Filtros de realce de bordas Vertical Horizontal Gradiente Roberts Sobel Laplaciano Marcelo Gattass
Imagem filtrada com um filtro passa alta Imagem Digital 25/11/2017 Imagem filtrada com um filtro passa alta Marcelo Gattass
Linearização da Imagem computacional
“Estrutura” de uma imagem Imagem Digital 25/11/2017 “Estrutura” de uma imagem y j x i y y x x Marcelo Gattass
Organização de pixels num array no formato TGA (targa) Imagem Digital 25/11/2017 Organização de pixels num array no formato TGA (targa) y Pixel (x,y) h-1 ... 3 2 1 b g r a b g r a b g r a b g r a 1 … w-1 x unsigned char *bgra_vector; … /* pixel x,y */ offset=4*(w*y+x); blue = bgra_vector[offset]; green = bgra_vector[offset+1]; red = bgra_vector[offset+2]; alpha = bgra_vector[offset+3]; Marcelo Gattass
Esquemas de armazenamento de imagens Imagem Digital 25/11/2017 Esquemas de armazenamento de imagens Plano de Cores Bancos (Java) Azul Verde Verm. 00 01 02 06 05 03 04 07 08 09 . . . 06 Informação é uma componente da cor 06 Pixel 0 Pixel 1 Pixel 2 Pixel 3 Pixel 4 Pixel 5 Organização dos pixels de uma imagem por planos de cores (Data Buffer – Java) Marcelo Gattass
Fomrato num arquivo BMP (windows) Imagem Digital 25/11/2017 Fomrato num arquivo BMP (windows) 00 01 02 08 07 06 05 03 04 10 09 11 Pixel 0 Pixel 1 Pixel 2 Pixel 3 13 12 14 Pixel 4 15 16 17 18 ... Organização dos pixels de uma imagem RGB no arquivo BMP colocado para garantir múltiplo de 4 Marcelo Gattass
Microsoft Windows Bitmap - BMP Imagem Digital 25/11/2017 Microsoft Windows Bitmap - BMP Características Principais Mono, 4-bit, 8-bit, 24-bit Tipo de compressão: RLE / não comprimido Tamanho máximo: 64K x 64K pixels Seções (versão 3): Header Info. Header Palette Bitmap Data Marcelo Gattass
BMP - Header typedef struct _Win3xBitmapHeader { Imagem Digital 25/11/2017 BMP - Header typedef struct _Win3xBitmapHeader { WORD Type; /* Image file type 4D42h (“BM”)*/ DWORD FileSize; /* File size (bytes) */ WORD Reserved1; /* Reserved (always 0) */ WORD Reserved2; /* Reserved (always 0) */ DWORD Offset; /* Offset to bitmap data in bytes */ } WIN3XHEAD; Marcelo Gattass
BMP - Information Header Imagem Digital 25/11/2017 BMP - Information Header typedef struct _Win3xBitmapInfoHeader { DWORD Size; /* Size of this Header (40) */ DWORD Width; /* Image width (pixels) */ DWORD Height; /* Image height (pixels) */ WORD Planes; /* Number of Planes (always=1) */ WORD BitCount; /* Bits per pixel (1/4/8 or 24)*/ DWORD Compression; /* Compression (0/1/2) */ DWORD SizeImage; /* Size of bitmap (bytes) */ DWORD XPelsPerMeter; /* Horz. resol.(pixels/m) */ DWORD YPelsPerMeter; /* Vert. resol.(pixels/m) */ DWORD ClrUsed; /* Num of colors in the image */ DWORD ClrImportant; /* Num of important colors */ } WIN3XINFOHEADER; Marcelo Gattass
BMP - Palette typedef struct _Win3xPalette { Imagem Digital 25/11/2017 BMP - Palette typedef struct _Win3xPalette { RGBQUAD Palette[ ]; /* 2, 16, or 256 elem. */ } WIN3XPALETTE; typedef struct _Win3xRgbQuad BYTE Blue; /* 8-bit blue component */ BYTE Green; /* 8-bit green component */ BYTE Red; /* 8-bit red component */ BYTE Reserved; /* Reserved (= 0) */ } RGBQUAD; Marcelo Gattass
Imagem Digital 25/11/2017 BMP - Image Data Notas Cada scan line em um arquivo BMP é sempre um múltiplo de 4. Imagens com1-, 4-, e 8-bits usam uma palheta de cores. Imagens com 24-bits guardam a cor diretamente, na ordem azul, verde e vermelho. O armazenamento da imagem é sempre feito a partir do canto esquerdo inferior. Marcelo Gattass
codificação
Codificação uniforme tons Podemos melhorar? Uniforme # pixels código Imagem Digital 25/11/2017 Codificação uniforme Uniforme tons # pixels código tam. # bits 1900 000 3 5700 1/7 2500 001 7500 2/7 2100 010 6300 3/7 1600 011 4800 4/7 800 100 2400 5/7 600 101 1800 6/7 300 110 900 1 200 111 TOTAL 30000 Podemos melhorar? Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 3/7 1600 4/7 800 5/7 600 6/7 300 1 200 1/7 2500 2/7 2100 1900 3/7 1600 4/7 800 5/7 600 n0 500 n0 6/7 1 Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 3/7 1600 4/7 800 5/7 600 n0 500 1/7 2500 2/7 2100 1900 3/7 1600 n1 1100 4/7 800 n1 n0 5/7 6/7 1 Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 3/7 1600 n1 1100 4/7 800 1/7 2500 2/7 2100 1900 n2 3/7 1600 n0 6/7 1 5/7 n1 4/7 n2 Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman 1/7 2500 2/7 2100 1900 n2 3/7 1600 n3 3500 1/7 2500 2/7 2100 1900 n0 6/7 1 5/7 n1 4/7 n2 3/7 n3 Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman n3 3500 1/7 2500 2/7 2100 1900 n4 4000 n3 3500 1/7 2500 n4 2/7 n0 6/7 1 5/7 n1 4/7 n2 3/7 n3 Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman n6 n4 4000 n3 3500 1/7 2500 n5 6000 n4 4000 n4 n5 n3 1/7 2/7 n2 3/7 n1 4/7 n0 5/7 6/7 1 Marcelo Gattass
Construção da Árvore Huffman Imagem Digital 25/11/2017 Construção da Árvore Huffman 1 11 10 01 00 111 110 1111 1110 11111 11110 111101 111100 n0 n1 n2 n3 n4 n5 n6 6/7 5/7 4/7 3/7 2/7 1/7 Marcelo Gattass
Codificação de Huffman Imagem Digital 25/11/2017 Codificação de Huffman Uniforme Huffman tons # pixels código tam. # bits 1900 000 3 5700 00 2 3800 1/7 2500 001 7500 10 5000 2/7 2100 010 6300 01 4200 3/7 1600 011 4800 110 4/7 800 100 2400 1110 4 3200 5/7 600 101 1800 11111 5 3000 6/7 300 900 111101 6 1 200 111 111100 1200 TOTAL 30000 27000 Marcelo Gattass
Redundância de Codificação Imagem Digital 25/11/2017 Redundância de Codificação r p(r) Code 1 l(r) l(r)p(r) Code 2 l(r) l(r)p(r) 0.19 000 3 0.57 11 2 0.38 1/7 0.25 001 3 0.75 01 2 0.50 2/7 0.21 010 3 0.63 10 2 0.42 3/7 0.16 011 3 0.48 001 3 0.48 4/7 0.08 100 3 0.24 0001 4 0.32 5/7 0.06 101 3 0.18 00001 5 0.30 6/7 0.03 110 3 0.09 000001 6 0.18 1 0.02 111 3 0.06 000000 6 0.12 1.00 Lavg= 3.00 Lavg= 2.70 rk = tons de cinza em uma imagem, k=0, 1, ..., -1 p(rk) = nk / n onde nk = número de pixels com tom rk n = número de pixels da imagem 11 10 01 001 0001 00001 000001 000000 Marcelo Gattass
Resultado da Teoria da Informação Imagem Digital 25/11/2017 Resultado da Teoria da Informação r p(r) Code 1 l(r) l(r)p(r) Code 2 log(1/p) log(1/p)*p 0.19 000 3 0.57 11 2 0.38 2.4 0.46 1/7 0.25 001 0.75 01 0.50 2.0 2/7 0.21 010 0.63 10 0.42 2.3 0.47 3/7 0.16 011 0.48 2.6 4/7 0.08 100 0.24 0001 4 0.32 3.6 0.29 5/7 0.06 101 0.18 00001 5 0.30 4.1 6/7 0.03 110 0.09 000001 6 5.1 0.15 1 0.02 111 000000 0.12 5.6 0.11 =1.00 Lavg = 3.00 2.70 Lopt = 2.65 Marcelo Gattass
Compressão do jpeg
Aplicações são tecnologicamente complexas: exemplo: algoritmo do JPEG 8x8 blocks Source Image B G R DCT-based encoding Compressed image data FDCT Quantizer Entropy Encoder Table Table
Equations for JPEG DCT Forward DCT: Inverse DCT:
Visualization of Basis Functions Increasing frequency
Organização de pixels num array no formato TGA (targa) Pixel (x,y) h-1 ... 3 2 1 b g r a b g r a b g r a b g r a 1 … w-1 x unsigned char *bgra_vector; … offset=4*(w*y+x); blue = bgra_vector[offset]; green = bgra_vector[offset+1]; red = bgra_vector[offset+2]; alpha = bgra_vector[offset+3];