Egzamin poprawkowy płatny ostatni 2011.03.07
Zad1. Napisać program wyznaczający kontrast (C) obrazu kolorowego o wymiarach M x N i 24-bitowej strukturze pixela (RGB).
$$\mathbf{C}\mathbf{=}\sqrt{\frac{\mathbf{1}}{\mathbf{\text{MN}}}\sum_{\mathbf{i}\mathbf{= 1}}^{\mathbf{M}}{\sum_{\mathbf{j}\mathbf{= 1}}^{\mathbf{N}}\left( \mathbf{f}\left( \mathbf{i}\mathbf{,}\mathbf{j} \right)\mathbf{- J} \right)^{\mathbf{2}}}}\backslash n$$
M , N - wymiary obrazu
f(i, j) - poziom jasności w pkt (i, j)
J - jasność obrazu
$$\mathbf{J}\mathbf{=}\frac{\mathbf{1}}{\mathbf{\text{MN}}}\sum_{\mathbf{i}\mathbf{=}\mathbf{1}}^{\mathbf{M}}{\sum_{\mathbf{j}\mathbf{=}\mathbf{1}}^{\mathbf{N}}{\mathbf{f}\left( \mathbf{i}\mathbf{,}\mathbf{j} \right)}}\backslash n$$
Zad2. Wykorzystując funkcje GL_TRIANGLE_FAN biblioteki OpenGL, napisać program generujący obraz modelu koloru HLS z osią jasności I wyznaczoną przez pkt o współrzędnych (0.0 , -0.5 , 0.0) i (0.0 , 0.5 , 0.0) i punkcie R o współrzędnych (1.0 , 0.0 , 0.0)
"Można zrobić w 2ch częściach (góra 0 do 0.5 i dół -0.5 do 0)
Nie ma znaczenia czy w pkt (1.0 , 0.0 , 0.0) R, G czy B … bo figura jest bryłą o nierozróżnialnych wierzchołkach"
void RysujHLS_TRF(void) {
int i;
float x, y;
float PI = 3.1415;
int N = 6; //liczba podziałów koła
int dAlfa = 360 / N; //wartość kąta wyznaczającego kolejny pkt na okręgu
int r = 1;
float L = 0.5;
glBegin(GL_TRIANGLE_FAN);
glVertex3f(0.0, L, 0.0);
for (i = 0; i * dAlfa <= 360.0; i++) {
x = r * sin(i * dAlfa * PI / 180);
y = r * cos(i * dAlfa * PI / 180);
glVertex3f(x, 0, y);
}
glEnd();
glBegin(GL_TRIANGLE_FAN); //koniecznie
glVertex3f(0.0, -L, 0.0);
for (i = 0; i * dAlfa <= 360.0; i++) {
x = r * sin(i * dAlfa * PI / 180);
y = r * cos(i * dAlfa * PI / 180);
glVertex3f(x, 0, y);
}
glEnd();
}
Zad3. Wyznacz liczbę pikseli w linii, gdy wyświetlany obraz ma 1280 linii,
zakładając, że VFreq = 80Hz, czas wygaszania poziomego i pionowego wynosi HBlank = 1,375 micro_s i VBlank = 0,5 ms
Taktowanie zegara V_CLK = 200 MHz
4 podstawowe wzory:
HActive = K/VCLK
1/HFreq = HActive+HBlank
VActive = L/HFreq
1/VFreq = VActive+VBlank
Dane: L = 1280 ; VFreq = 80Hz ; HBlank = 1,375 micro_s ; VBlank = 0,5 ms ; V_CLK = 200 MHz
K = ?
HAct = K / V_CLK => K = HAct * V_CLK
1/HFreq = HAct + HBlank => HAct = 1/HFreq - HBlank
VAct = L/HFreq => HFreq = L / VAct
1/VFreq = VAct+VBlank => VAct = 1/VFreq - VBlank
Zbierając do kupy:
K = HAct * V_CLK =
= (1/HFreq - HBlank) * V_CLK =
= (1/( L / VAct) - HBlank) * V_CLK =
= (1/( L / (1/VFreq - VBlank)) - HBlank) * V_CLK
$$\mathbf{K}\mathbf{= \ }\mathbf{H}_{\mathbf{\text{Act}}}\mathbf{*}\mathbf{\ }\mathbf{V}_{\mathbf{\text{CLK}}}\mathbf{=}\left( \frac{\mathbf{1}}{\mathbf{H}_{\mathbf{\text{Freq}}}}\mathbf{-}\mathbf{H}_{\mathbf{\text{Blank}}} \right)\mathbf{*}\mathbf{\ }\mathbf{V}_{\mathbf{\text{CLK}}}\mathbf{=}\left( \frac{\mathbf{1}}{\frac{\mathbf{L}}{\mathbf{V}_{\mathbf{\text{Act}}}}}\mathbf{-}\mathbf{H}_{\mathbf{\text{Blank}}} \right)\mathbf{*}\mathbf{\ }\mathbf{V}_{\mathbf{\text{CLK}}}\mathbf{= \ }\left( \frac{\mathbf{V}_{\mathbf{\text{Act}}}}{\mathbf{L}}\mathbf{-}\mathbf{H}_{\mathbf{\text{Blank}}} \right)\mathbf{*}\mathbf{\ }\mathbf{V}_{\mathbf{\text{CLK}}}\mathbf{=}\left( \frac{\frac{\mathbf{1}}{\mathbf{V}_{\mathbf{\text{Freq}}}}\mathbf{-}\mathbf{V}_{\mathbf{\text{Blank}}}}{\mathbf{L}}\mathbf{-}\mathbf{H}_{\mathbf{\text{Blank}}} \right)\mathbf{*}\mathbf{\ }\mathbf{V}_{\mathbf{\text{CLK}}}\backslash n$$
$$\mathbf{K}\mathbf{=}\left( \frac{\frac{\mathbf{1}}{\mathbf{V}_{\mathbf{\text{Freq}}}}\mathbf{-}\mathbf{V}_{\mathbf{\text{Blank}}}}{\mathbf{L}}\mathbf{-}\mathbf{H}_{\mathbf{\text{Blank}}} \right)\mathbf{*}\mathbf{\ }\mathbf{V}_{\mathbf{\text{CLK}}} = \left( \frac{\frac{\mathbf{1}}{\mathbf{80}\frac{\mathbf{1}}{\mathbf{s}}}\mathbf{- 0,5*}\mathbf{10}^{\mathbf{- 3}}\mathbf{s}}{\mathbf{1280}}\mathbf{- 1,375*}\mathbf{10}^{\mathbf{- 6}}\mathbf{s} \right)\mathbf{*}\mathbf{\ 200}\mathbf{*}\mathbf{10}^{\mathbf{6}}\frac{\mathbf{1}}{\mathbf{s}} = = \left( \frac{\mathbf{0,0125s}\mathbf{- 0,0005}\mathbf{s}}{\mathbf{1280}}\mathbf{- 0,000001375}\mathbf{s} \right)\mathbf{*}\mathbf{\ 200}\mathbf{*}\mathbf{10}^{\mathbf{6}}\frac{\mathbf{1}}{\mathbf{s}} = \left( \mathbf{0,000009375s}\mathbf{- 0,000001375}\mathbf{s} \right)\mathbf{*}\mathbf{\ 200000000}\frac{\mathbf{1}}{\mathbf{s}}\mathbf{= 1600}\backslash n$$
Rozwiązanie Salamon tablica:
VAct = 1/VFreq - VBlank
VAct = 1/80Mhz - 0,5ms = 12,5 - 0,5 = 12ms
Pojedyncza linia: 1/HFreq = 12ms/1280 = 9,375 micro_s
1/HFreq = 12ms/1280 = 9,375 micro_s
HAct = 9,375 - 1,375 micro_s = 8 micro_s
K = 8*200MHz = 1600