problemes de vc/psiv solució parcial - uab barcelona · 2020. 2. 14. · problemes de vc/psiv...

3

Upload: others

Post on 17-Oct-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Problemes de VC/PSIV Solució parcial - UAB Barcelona · 2020. 2. 14. · Problemes de VC/PSIV Solució parcial elipFe Lumbreras Ruiz 2 Processament d'imatges 2. 1 (*) a) Suposem

Problemes de VC/PSIVSolució parcialFelipe Lumbreras Ruiz

2 Processament d'imatges

2. 1 (*) a) Suposem que tenim un satèl.lit que sobrevola tota la terra i pren imatges amb resolució 10m per píxel amb 13 bandes espectrals (Sentinel-2 fa una cobertura global sistemàtica de 56◦S a84◦N cada 5 dies amb resolucions entre 10 i 60 m per píxel com a referència). b) La companyiaplanet (www.planet.com) té minisatèl.lits que prenen imatges cada dia amb 4 bandes (R,G,B,NIR)i amb resolució 3 m per píxel. c) Amb satèl.lits de més resolució, o amb vols amb avió es podenarribar a resolucions per sota de 0,5 m per píxel. d) Amb un vol amb dron podem baixar de 10cm per píxel.Per cadascun d'aquests escenaris: a) 13 bandes, 10 m/pix, b) 4 bandes, 3 m/pix, c) 3 bandes, 0,5m/pix, d) 3 bandes, 0,1 m/pix, quina quantitat d'informació (sense tenir en compte superposicionsd'imatges ni compressions) es necessitaria per captura 1) l'illa de Mallorca, 2) tot el món.

2. 2 Implementa la funció histograma per imatges de 8 bits (myHist). Busca per internet una imatgeen color de la teva fruita preferida. Mostra l'histograma dels tres canals (r,g,b). Analitza lesdiferents distribucions en funció del color de la imatge. Matlab disposa de la funció imhist perfer això.function [h, h1, h2, h3, h4] = myHistPru(im)

% més simple, accedint directament

h1 = zeros(256, 1);

tic

for i = 1:numel(im)

h1(im(i) + 1) = h1(im(i) + 1) + 1;

end

toc

% accedint per files i columnes

h2 = zeros(256, 1);

tic

for f = 1:size(im, 1)

for c=1:size(im, 2)

h2(im(f, c) + 1) = h2(im(f, c) + 1) + 1;

end

end

toc

% fent servir massa bucles, molt ineficient

h3 = zeros(256,1);

tic

for i = 1:256

for f = 1:size(im, 1)

for c = 1:size(im, 2)

if im(f, c) == i - 1

h3(i) = h3(i) + 1;

end

end

end

end

toc

% ineficient

h4 = zeros(256, 1);

tic

for i = 1:256

h4(i) = sum(sum(im == (i - 1)));

end

toc

% propi de matlab, optimitzat

tic

h = imhist(im);

toc

disp ('test')

disp([sum(abs(h1 - h)), sum(abs(h2 - h)), sum(abs(h3 - h)), sum(abs(h4 - h))])

function h = myHist(im)

h = zeros(256, 1);

for i = 1:numel(im)

h1(im(i) + 1)=h1(im(i) + 1) + 1;

end

>> im = imread(['https://upload.wikimedia.org/wikipedia/'...

'commons/c/c5/CHIRIMOYAS.JPG']);

>> figure, imshow(im)

>> figure

>> plot(myHist(im(:, :, 1)), 'r');

>> hold on

>> plot(myHist(im(:, :, 2)), 'g');

>> plot(myHist(im(:, :, 3)), 'b');

>> axis([1, 256, 0, 3500]);

>> hold off

>> disp('altra manera fent servir imhist')

>> hr=imhist(im(:, :, 1));

>> hg=imhist(im(:, :, 2));

>> hb=imhist(im(:, :, 3));

>> figure

>> hold on

>> plot(hr, 'r');

>> plot(hg, 'g');

>> plot(hb, 'b');

>> axis([1, 256, 0, 3500]);

>> hold off

1

Page 2: Problemes de VC/PSIV Solució parcial - UAB Barcelona · 2020. 2. 14. · Problemes de VC/PSIV Solució parcial elipFe Lumbreras Ruiz 2 Processament d'imatges 2. 1 (*) a) Suposem

2. 3 Implementa la funció histograma acumulat (myHistAcum) per imatges de 8 bits. Normalitza el valorentre [0,1]. Mostra l'histograma acumulat dels tres canals anteriors.

function ha = histAcu(im)

h = imhist(im);

ha = cumsum(h);

ha = ha / ha(end);

>> im = imread(['https://upload.wikimedia.org/wikipedia/'...

'commons/c/c5/CHIRIMOYAS.JPG']);

>> har = (histAcu(im(:,:,1)));

>> hag = (histAcu(im(:,:,2)));

>> hab = (histAcu(im(:,:,3)));

>> figure

>> hold on

>> plot(har, 'r');

>> plot(hag, 'g');

>> plot(hab, 'b');

>> axis([1, 256, 0, 1])

>> hold off

2. 4 (*) Implementa la funció look-at-table (myLut). Input imatge de 8 bits, LUT taula de 256 valors,output imatge de 8 bits. Aplica les següents LUTs i digues què representen:

(a) lut=[255:-1:0];

(b) lut=[zeros(1,120) 255*ones(1,40) zeros(1,96)];

(c) l=uint8([2*[1:100]-2, (57.0/156)*[101:256]-(5500.0/156)+198]);

Per aquests casos busca alternatives simples per realitzar el mateix sense fer us de LUTs.

2. 5 Implementa una funció que faci una maximització del contrast però que es pugui passar el per-centatge de píxels que queden fora (per sota i per sobre) per evitar les cues que de vegades donenproblemes en la visualització.function imr = maxConPer(im,per)

if nargin == 1

per = 0;

end

h = imhist(im);

ha = cumsum(h);

total = ha(end); % =sum(h)

xa = total * per / 100.0;

xb = total * (100 - per) / 100.0;

vmin = find(ha < xa, 1, 'last');

vmax = find(ha > xb, 1, 'first');

imr = uint8(min(255, max(0, 255 * (double(im) - vmin) / (vmax - vmin))));

>> im = imread('cameraman.tif');

>> imr = maxConPer(im, 5);

>> figure, imshow(im)

>> figure, imhist(im)

>> figure, imshow(imr)

>> figure, imhist(imr)

2. 6 (*) Busca una imatge de �ors amb cel. Alterarem les components cromàtiques en l'espai HSV.Per tant farem servir les funcions per passar d'RGB a HSV i a l'inrevés (rgb2hsv i hsv2rgb). Enaquest cas la imatge transformada és double en el rang [0,1] per tant, busca alternatives senzillesper no fer servir LUTs. Genera tres imatges: a) la primera tindrà el canal de to invertit, b) lasegona tindrà el canal de saturació multiplicat per 2 i c) la tercera tindrà el canal de value dividita la meitat.

2. 7 (*) Una tècnica de balanç de color és l'anomenat �gray world assumption� que considera que enmitjana les imatges haurien de ser grises. Implementa una funció (myGrayWorld). Busca els factorsque han de multiplicar cadascun dels tres canals perquè tinguin la mateixa mitjana. Evita que elsvalors es passin de 255. Aplica aquesta funció a imatges amb el color descompensat.

2

Page 3: Problemes de VC/PSIV Solució parcial - UAB Barcelona · 2020. 2. 14. · Problemes de VC/PSIV Solució parcial elipFe Lumbreras Ruiz 2 Processament d'imatges 2. 1 (*) a) Suposem

2. 8 (*) Implementa l'equalització per imatges de 8 bits fent servir una LUT amb l'histograma acu-mulat. Vigila amb els rangs de tot plegat. Aplica-la al canal vermell de la imatge de la petjada ala lluna (petjada). Mostra totes dues imatges. Mostra també els dos histogrames. Es pot arribaral mateix resultat alterant el contrast de la primera imatge? Per què no s'arriba a un histogramapla. Fes la mateixa prova per la imatge de gossos (gossos) i pel canal vermell de la imatge delregistre (registre).

2. 9 (*) Farem un model de pell senzill per detectar cares basant-nos en el color de pell. Agafatres imatges on surtin cares. El model de pell consistirà en la mitjana i la desviació estàndard.Agafarem un conjunt de N punts (ginput) a sobre d'una de les imatges i buscarem per aquestpunts el valor mitjà i la desviació estàndard per cada canal. Apliquem thresholds dobles a cadacanal centrat en el valor mitjà de pell més menys un factor per la desviació estàndard. Juga ambaquest factor. En l'espai RGB, quina forma té la zona on cauen el punts de pell? Calcula el modelper la primera i aplica'l a la resta. Com es podria millorar aquesta detecció?

2. 10 Pren un vídeo curt d'una escena estàtica. Treu part del soroll que pugui haver-hi sumant tots elsframes. Compara en una grà�ca una de les �les d'un dels frames amb la mateixa �la del frameresultat. Quant ha millorat la relació senyal sorol (SNR). Les dades les teniu en aquesta seqüència(teclat).

vi = VideoReader('http://www.cvc.uab.es/shared/teach/a102784/doc/images/SeqSoroll.mp4');

f = []; vs = 0; n = 0;

while hasFrame(vi)

im = readFrame(vi);

f=[f; im(120,:,1)];

imshow(im);

vs = vs + double(im);

n = n + 1;

end

vs = uint8(vs / n);

figure, imshow(vs)

figure, hold on

plot(f(1,:)), plot(f(50,:)), plot(f(100,:)), plot(vs(120,:,1), 'LineWidth', 3.0)

legend({'frame_{1}', 'frame_{50}', 'frame_{100}', 'mean'})

axis([0, 320, 0, 200])

La magnitud de la �uctuació (soroll) cau amb l'arrel quadrada del nombre d'imatges que intervenen en la mitjana.Per tant com hem sumat cent imatges el soroll del resultat és deu vegades més petit.

2. 11 (*) Connecta't a una càmera web que vagi actualitzant sovint el que es veu. Des de Matlab potsfer la lectura d'una url si apunta a una imatge. Utilitza la diferència de frames per detectaresdeveniments dins la seqüència. Mostra un parell de frames consecutius i el valor absolut de ladiferència. Marca la zona on hi hagi moviment a mà.

3