Professional Documents
Culture Documents
Fahad Ali Khan Ivc
Fahad Ali Khan Ivc
Submitted To:
DR
NASRUMINALLAH
Prepared By:
Fahad Ali khan.
UNI VERSI TY OF ENGI NEERI NG
AND TECHNOLOGY
PESHAWAR
PART A.
RGB
IMAGE
YCbCr
4:2:2
YCbCr
4:2:0
YCbCr
BLOCK DIAGRAM REPRESENTATION
FILE OPEN FILE OPEN
FILE WRITE
CONVERT
RGB TO
YCbCr
YCbCr
4:2:2
FAILED TO
OPEN
NO
YES
YCbCr
4:2:0
FAILED TO
OPEN
NO
FOR WRITING A FILE
FOR READING A FILE
FLOW CHART REPRESENTATION
CODE.
#include <stdio.h>
#include <conio.h>
#include "stdafx.h"
#include <iomanip>
#include <iostream>
#define wid 352
#define Hgt 240
using namespace std;
int main()
{
FILE *fr;
FILE *fw;
fr=fopen("tennis.rgb","rb");
if(fr==NULL)
{
printf("FILE NOT OPENING\n");
return 0;
}
else{
printf("tennis.rgb OPEN SUCCESSFULLY\n");
}
fw=fopen("tennis2.yuv","wb");
if(fw==NULL)
{
printf("FILE NOT OPENING\n");
return 0;
}
unsigned char red[hgt][wid];
unsigned char green[hgt][wid];
unsigned char blue[hgt][wid];
unsigned char Y[hgt][wid];
unsigned char Cb[hgt][wid];
unsigned char Cr[hgt][wid];
// For 4:2:2
unsigned char Cb2[hgt/2][wid/2];
unsigned char Cr2[hgt/2][wid/2];
for(int frame=0; frame<10; frame++){
fread(red, hgt*wid,sizeof(unsigned char),fr);
fread(green, hgt*wid,sizeof(unsigned char),fr);
fread(blue, hgt*wid,sizeof(unsigned char),fr);
// RGB to YUV
for(int i=0; i<Hhgt; i++){
for(int j=0; j<wid; j++){
Y[i][j] = 0.299*red[i][j] + 0.587*green[i][j] +
0.114*blue[i][j];
Cb[i][j] = 0.564*(blue[i][j] - Y[i][j]);
Cr[i][j] = 0.713*(red[i][j] - Y[i][j]);
}
}
// For 4:2:0
for(int i=0; i<hgt/2; i++){
for(int j=0; j<wid/2; j++){
Cb2[i][j] = Cb[i*2][j*2];
Cr2[i][j] = Cr[i*2][j*2];
}
}
fwrite(Y, hgt*wid, sizeof(unsigned char),fw);
fwrite(Cb2, hgt*wid>>2, sizeof(unsigned char),fw);
fwrite(Cr2, hgt*wid>>2, sizeof(unsigned char),fw);
}
fclose(fr);
fclose(fp);
return 0;
OUTPUT
PART B.
CODE
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <string>
#define ROWS 360
#define COLUMNS 240
using namespace std;
int main()
{
FILE *fr;
FILE *fw;
fw=fopen("mom.yuv","wb");
char *s[] = {
"mom/mom.010.ppm",
"mom/mom.011.ppm",
"mom/mom.012.ppm",
"mom/mom.013.ppm",
"mom/mom.014.ppm",
"mom/mom.015.ppm",
"mom/mom.016.ppm",
"mom/mom.017.ppm",
"mom/mom.018.ppm",
"mom/mom.019.ppm",
"mom/mom.020.ppm",
"mom/mom.021.ppm",
"mom/mom.022.ppm",
"mom/mom.023.ppm",
"mom/mom.024.ppm",
"mom/mom.025.ppm"};
int num_pics = sizeof(s)/sizeof(s[0]);
for(int pic=0; pic<num_pics; pic++){
unsigned char red[1];
unsigned char green[1];
unsigned char blue[1];
unsigned char Y[COLUMNS*ROWS];
unsigned char Cb[COLUMNS*ROWS];
unsigned char Cr[COLUMNS*ROWS];
unsigned char Cb2[COLUMNS/2][ROWS/2];
unsigned char Cr2[COLUMNS/2][ROWS/2];
fr=fopen(s[pic],"rb");
int j=0;
for(int i=15; i<COLUMNS*ROWS; i++){
fread(red, 1, sizeof(unsigned char), fr);
fread(green, 1, sizeof(unsigned char), fr);
fread(blue, 1, sizeof(unsigned char), fr);
Y[j] = 0.299*red[0] + 0.587*green[0] +
0.114*blue[0];
Cb[j] = 0.564*(blue[0] - Y[j]);
Cr[j] = 0.713*(red[0] - Y[j]);
j++;
}
//setting format for 4:2:0
for(int i=0; i<COLUMNS/2; i++){
for(int k=0; k<ROWS/2; k++){
Cb2[i][k] = Cb[(i*2*ROWS)+(k*2)];
Cr2[i][k] = Cr[(i*2*ROWS)+(k*2)];
}
}
fwrite(Y, COLUMNS*ROWS, sizeof(unsigned
char),fw);
fwrite(Cb2, COLUMNS*ROWS>>2, sizeof(unsigned
char),fw);
fwrite(Cr2, COLUMNS*ROWS>>2, sizeof(unsigned
char),fw);
}
cout<<"Completed";
getch();
return 0;
}