Diplom_29-06 (1221240), страница 9
Текст из файла (страница 9)
StaticText4 = new wxStaticText(Panel1, ID_STATICTEXT4, wxEmptyString, wxPoint(736,160), wxDefaultSize, 0, _T("ID_STATICTEXT4"));
StaticText5 = new wxStaticText(Panel1, ID_STATICTEXT5, wxEmptyString, wxPoint(736,176), wxDefaultSize, 0, _T("ID_STATICTEXT5"));
StaticBitmap3 = new wxStaticBitmap(Panel1, ID_STATICBITMAP3, wxNullBitmap, wxPoint(440,32), wxSize(200,200), wxSIMPLE_BORDER, _T("ID_STATICBITMAP3"));
Choice1 = new wxChoice(Panel1, ID_CHOICE1, wxPoint(40,248), wxSize(256,21), 0, 0, 0, wxDefaultValidator, _T("ID_CHOICE1"));
Choice1->Append(_("RGB to YUV 4:4:4"));
Choice1->Append(_("RGB to YUV 4:2:2"));
Choice1->SetSelection( Choice1->Append(_("RGB to YUV 4:2:0")) );
Choice1->Append(_("ДИКМ"));
Button2 = new wxButton(Panel1, ID_BUTTON2, _("Использовать алгоритм сжатия"), wxPoint(352,248), wxSize(248,23), 0, wxDefaultValidator, _T("ID_BUTTON2"));
CheckBox1 = new wxCheckBox(Panel1, ID_CHECKBOX1, _("Показывать отправляемые массивы"), wxPoint(8,280), wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX1"));
CheckBox1->SetValue(false);
StaticTextRatio = new wxStaticText(Panel1, ID_STATICTEXT6, wxEmptyString, wxPoint(736,144), wxDefaultSize, 0, _T("ID_STATICTEXT6"));
Button3 = new wxButton(Panel1, ID_BUTTON3, _("Загрузить изображение"), wxPoint(648,16), wxDefaultSize, 0, wxDefaultValidator, _T("ID_BUTTON3"));
CheckBox2 = new wxCheckBox(Panel1, ID_CHECKBOX2, _("Показать гистрограммы"), wxPoint(232,280), wxDefaultSize, 0, wxDefaultValidator, _T("ID_CHECKBOX2"));
CheckBox2->SetValue(false);
RadioButton1 = new wxRadioButton(Panel1, ID_RADIOBUTTON1, _("R"), wxPoint(392,280), wxDefaultSize, 0, wxDefaultValidator, _T("ID_RADIOBUTTON1"));
RadioButton1->SetValue(true);
RadioButton2 = new wxRadioButton(Panel1, ID_RADIOBUTTON2, _("G"), wxPoint(424,280), wxDefaultSize, 0, wxDefaultValidator, _T("ID_RADIOBUTTON2"));
RadioButton3 = new wxRadioButton(Panel1, ID_RADIOBUTTON3, _("B"), wxPoint(456,280), wxDefaultSize, 0, wxDefaultValidator, _T("ID_RADIOBUTTON3"));
StaticText1 = new wxStaticText(Panel1, ID_STATICTEXT7, _("Исходное изображение"), wxPoint(32,8), wxDefaultSize, 0, _T("ID_STATICTEXT7"));
wxFont StaticText1Font(10,wxSWISS,wxFONTSTYLE_NORMAL,wxBOLD,false,_T("Arial"),wxFONTENCODING_DEFAULT);
StaticText1->SetFont(StaticText1Font);
StaticText6 = new wxStaticText(Panel1, ID_STATICTEXT8, _("Преобразованное изображение"), wxPoint(216,8), wxDefaultSize, 0, _T("ID_STATICTEXT8"));
wxFont StaticText6Font(10,wxSWISS,wxFONTSTYLE_NORMAL,wxBOLD,false,_T("Arial"),wxFONTENCODING_DEFAULT);
StaticText6->SetFont(StaticText6Font);
StaticText7 = new wxStaticText(Panel1, ID_STATICTEXT9, _("Получаемое изображение"), wxPoint(456,8), wxDefaultSize, 0, _T("ID_STATICTEXT9"));
wxFont StaticText7Font(10,wxSWISS,wxFONTSTYLE_NORMAL,wxBOLD,false,_T("Arial"),wxFONTENCODING_DEFAULT);
StaticText7->SetFont(StaticText7Font);
StaticText8 = new wxStaticText(Panel1, ID_STATICTEXT10, _("Параметры"), wxPoint(648,56), wxDefaultSize, 0, _T("ID_STATICTEXT10"));
StaticText9 = new wxStaticText(Panel1, ID_STATICTEXT11, _("Чистая разница"), wxPoint(648,80), wxDefaultSize, 0, _T("ID_STATICTEXT11"));
StaticText10 = new wxStaticText(Panel1, ID_STATICTEXT12, _("Max dY"), wxPoint(648,96), wxDefaultSize, 0, _T("ID_STATICTEXT12"));
StaticText11 = new wxStaticText(Panel1, ID_STATICTEXT13, _("PSNR"), wxPoint(648,112), wxDefaultSize, 0, _T("ID_STATICTEXT13"));
StaticText12 = new wxStaticText(Panel1, ID_STATICTEXT14, _("Коэфф. сжатия"), wxPoint(648,144), wxDefaultSize, 0, _T("ID_STATICTEXT14"));
StaticText13 = new wxStaticText(Panel1, ID_STATICTEXT15, _("SNR"), wxPoint(648,128), wxDefaultSize, 0, _T("ID_STATICTEXT15"));
StaticTextSNR = new wxStaticText(Panel1, ID_STATICTEXT16, wxEmptyString, wxPoint(736,128), wxDefaultSize, 0, _T("ID_STATICTEXT16"));
StaticText14 = new wxStaticText(Panel1, ID_STATICTEXT17, _("Исходное"), wxPoint(648,160), wxDefaultSize, 0, _T("ID_STATICTEXT17"));
StaticText15 = new wxStaticText(Panel1, ID_STATICTEXT18, _("Передаваемое"), wxPoint(648,176), wxDefaultSize, 0, _T("ID_STATICTEXT18"));
SpinCtrl1 = new wxSpinCtrl(Panel1, ID_SPINCTRL1, _T("6"), wxPoint(664,216), wxSize(48,21), 0, 1, 7, 6, _T("ID_SPINCTRL1"));
SpinCtrl1->SetValue(_T("6"));
SpinCtrl1->Hide();
StaticText16 = new wxStaticText(Panel1, ID_STATICTEXT19, _("dY"), wxPoint(728,216), wxSize(24,21), 0, _T("ID_STATICTEXT19"));
StaticText16->Hide();
SpinCtrl2 = new wxSpinCtrl(Panel1, ID_SPINCTRL2, _T("3"), wxPoint(664,240), wxSize(48,21), 0, 1, 7, 3, _T("ID_SPINCTRL2"));
SpinCtrl2->SetValue(_T("3"));
SpinCtrl2->Hide();
StaticText17 = new wxStaticText(Panel1, ID_STATICTEXT20, _("dUV"), wxPoint(728,240), wxSize(40,21), 0, _T("ID_STATICTEXT20"));
StaticText17->Hide();
CheckBox3 = new wxCheckBox(Panel1, ID_CHECKBOX3, _("Сохранять декодированное изображение на диск C"), wxPoint(496,280), wxSize(312,16), 0, wxDefaultValidator, _T("ID_CHECKBOX3"));
CheckBox3->SetValue(false);
MenuBar1 = new wxMenuBar();
Menu1 = new wxMenu();
MenuItem1 = new wxMenuItem(Menu1, idMenuQuit, _("Quit\tAlt-F4"), _("Quit the application"), wxITEM_NORMAL);
Menu1->Append(MenuItem1);
MenuBar1->Append(Menu1, _("&File"));
Menu2 = new wxMenu();
MenuItem2 = new wxMenuItem(Menu2, idMenuAbout, _("About\tF1"), _("Show info about this application"), wxITEM_NORMAL);
Menu2->Append(MenuItem2);
MenuBar1->Append(Menu2, _("Help"));
SetMenuBar(MenuBar1);
StatusBar1 = new wxStatusBar(this, ID_STATUSBAR1, 0, _T("ID_STATUSBAR1"));
int __wxStatusBarWidths_1[1] = { -1 };
int __wxStatusBarStyles_1[1] = { wxSB_NORMAL };
StatusBar1->SetFieldsCount(1,__wxStatusBarWidths_1);
StatusBar1->SetStatusStyles(1,__wxStatusBarStyles_1);
SetStatusBar(StatusBar1);
FileDialog1 = new wxFileDialog(this, _("Select file"), wxEmptyString, wxEmptyString, wxFileSelectorDefaultWildcardStr, wxFD_DEFAULT_STYLE, wxDefaultPosition, wxDefaultSize, _T("wxFileDialog"));
Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PRJ_ON_OCVFrame::OnButton1Click);
Connect(ID_CHOICE1,wxEVT_COMMAND_CHOICE_SELECTED,(wxObjectEventFunction)&PRJ_ON_OCVFrame::OnChoice1Select);
Connect(ID_BUTTON2,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PRJ_ON_OCVFrame::OnButton2Click);
Connect(ID_BUTTON3,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&PRJ_ON_OCVFrame::OnButton3Click);
Connect(idMenuQuit,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&PRJ_ON_OCVFrame::OnQuit);
Connect(idMenuAbout,wxEVT_COMMAND_MENU_SELECTED,(wxObjectEventFunction)&PRJ_ON_OCVFrame::OnAbout);
//*)
}
PRJ_ON_OCVFrame::~PRJ_ON_OCVFrame()
{
//(*Destroy(PRJ_ON_OCVFrame)
//*)
}
void PRJ_ON_OCVFrame::OnQuit(wxCommandEvent& event)
{
Close();
}
void PRJ_ON_OCVFrame::OnAbout(wxCommandEvent& event)
{
wxString msg = wxbuildinfo(long_f);
wxMessageBox(msg, _("Welcome to..."));
}
void PRJ_ON_OCVFrame::OnButton1Click(wxCommandEvent& event)
{
cv::Mat image1 = cv::imread("C:\\image2.jpg", 1);
//cv::Mat image2 = cv::imread("C:\\Users\\Public\\Pictures\\Sample Pictures\\image1.jpg", 1);
cvtColor(image1, image1, CV_BGR2RGB);
//cvtColor(image2, image2, CV_BGR2RGB);
cv::Mat imageYUV420 = cvCreateMat( image1.rows/2, image1.cols/2, CV_8UC3 );
cv::Mat image2 = cvCreateMat( image1.rows, image1.cols, CV_8UC3 );
//cvCreateData( imageYUV420 );
std::vector<cv::Mat> channels2;
cv::split(image2,channels2);
std::vector<cv::Mat> channels1;
cv::split(image1,channels1);
std::vector<cv::Mat> channelsYUV420;
cv::split(imageYUV420,channelsYUV420);
for( int i = 0; i < image1.rows; i+=2 ){
for( int j = 0;j < image1.cols; j+=2 ){
channelsYUV420[0].at<uchar>(i/2,j/2)=(int)(((float)channels1[0].at<uchar>(i,j)*0.299)+((float)channels1[1].at<uchar>(i,j)*0.587)+((float)channels1[2].at<uchar>(i,j)*0.114));
int U1=(int)(((float)channels1[0].at<uchar>(i,j)*-0.14713)+((float)channels1[1].at<uchar>(i,j)*-0.28886)+((float)channels1[2].at<uchar>(i,j)*0.436))+128;
int U2=(int)(((float)channels1[0].at<uchar>(i+1,j)*-0.14713)+((float)channels1[1].at<uchar>(i+1,j)*-0.28886)+((float)channels1[2].at<uchar>(i+1,j)*0.436))+128;
int U3=(int)(((float)channels1[0].at<uchar>(i,j+1)*-0.14713)+((float)channels1[1].at<uchar>(i,j+1)*-0.28886)+((float)channels1[2].at<uchar>(i,j+1)*0.436))+128;
int U4=(int)(((float)channels1[0].at<uchar>(i+1,j+1)*-0.14713)+((float)channels1[1].at<uchar>(i+1,j+1)*-0.28886)+((float)channels1[2].at<uchar>(i+1,j+1)*0.436))+128;
int V1=(int)(((float)channels1[0].at<uchar>(i,j)*0.615)+((float)channels1[1].at<uchar>(i,j)*-0.51499)+((float)channels1[2].at<uchar>(i,j)*-0.10001))+128;
int V2=(int)(((float)channels1[0].at<uchar>(i+1,j)*0.615)+((float)channels1[1].at<uchar>(i+1,j)*-0.51499)+((float)channels1[2].at<uchar>(i+1,j)*-0.10001))+128;
int V3=(int)(((float)channels1[0].at<uchar>(i,j+1)*0.615)+((float)channels1[1].at<uchar>(i,j+1)*-0.51499)+((float)channels1[2].at<uchar>(i,j+1)*-0.10001))+128;
int V4=(int)(((float)channels1[0].at<uchar>(i+1,j+1)*0.615)+((float)channels1[1].at<uchar>(i+1,j+1)*-0.51499)+((float)channels1[2].at<uchar>(i+1,j+1)*-0.10001))+128;
channelsYUV420[1].at<uchar>(i/2,j/2)=U1+U2+U3+U4/4;
channelsYUV420[2].at<uchar>(i/2,j/2)=V1+V2+V3+V4/4;
}
}
cv::merge(channelsYUV420,imageYUV420);
for( int i = 0; i < image2.rows; i+=2 ){
for( int j = 0;j < image2.cols; j+=2 ){
//channelsYUV420[1].at<uchar>(i/2,j/2)
//uchar R =
}
}
///Вычисление погрежности
unsigned long sum=0;
int maximux=0;
for( int i = 0; i < image2.rows; i++ ){
for( int j = 0;j < image2.cols; j++ ){
//channels2[0].at<uchar>(i,j)=channels2[0].at<uchar>(i,j)-5;
int R=(int)channels1[0].at<uchar>(i,j)-(int)channels2[0].at<uchar>(i,j);
int G=(int)channels1[1].at<uchar>(i,j)-(int)channels2[1].at<uchar>(i,j);
int B=(int)channels1[2].at<uchar>(i,j)-(int)channels2[2].at<uchar>(i,j);
sum=sum+ R*R+G*G+B*B;
if (R>maximux) maximux=R;
if (G>maximux) maximux=G;
if (B>maximux) maximux=B;
}
}
cv::merge(channels2,image2);
float div=sum/image1.rows*image1.cols;
div=sqrt(div);
double PSNR = pow(255,2)*image1.rows*image1.cols/sum;
PSNR=log10(PSNR)*10;
wxString mystring = wxString::Format(wxT("%f"), div);
StaticTextQuality->SetLabelText(mystring);
wxString mystring2 = wxString::Format(wxT("%d"), maximux);
StaticText2->SetLabelText(mystring2);
wxString mystring3 = wxString::Format(wxT("%f"), PSNR);
StaticText3->SetLabelText(mystring3);
wxString mystring4 = wxString::Format(wxT("%d"), image1.channels()*image1.cols*image1.rows);
StaticText4->SetLabelText(mystring4);
wxString mystring5 = wxString::Format(wxT("%d"), imageYUV420.channels()*imageYUV420.cols*imageYUV420.rows);
StaticText5->SetLabelText(mystring5);
cv::resize(image1, image1, cv::Size(150, 150), 0.0, 0.0);
wxImage aswxImage = wxImage(image1.cols, image1.rows, image1.data, true);
wxBitmap bitmap = wxBitmap(aswxImage);















