mainwindow.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include "cvfilters.h"
  4. #include <QFileDialog>
  5. #include <QString>
  6. #include <QTextStream>
  7. #include <QPixmap>
  8. #include <QImage>
  9. #include <QLabel>
  10. #include <iostream>
  11. #include <QMessageBox>
  12. #include "dialogselvardog.h"
  13. #include "dialogselrank.h"
  14. #include "dialogpercentagenoise.h"
  15. #include "dialogselgaussiannoise.h"
  16. #include "dialogabout.h"
  17. QString filename=NULL;
  18. QImage filteredImage;
  19. MainWindow::MainWindow(QWidget *parent) :
  20. QMainWindow(parent),
  21. ui(new Ui::MainWindow)
  22. {
  23. ui->setupUi(this);
  24. QCoreApplication::setApplicationName("Computer Vision @ Beast");
  25. setWindowTitle("Computer Vision @ Beast");
  26. }
  27. MainWindow::~MainWindow()
  28. {
  29. delete ui;
  30. }
  31. void MainWindow::on_pushButtonOpenImg_clicked()
  32. {
  33. filename = QFileDialog::getOpenFileName(this,tr("Choose an Image File"),QDir::currentPath(),"All File (*.*);;Image pgm (*.pgm)");
  34. if(!filename.isEmpty())
  35. {
  36. QImage image(filename);
  37. ui->labelOrigImg->setPixmap(QPixmap::fromImage(image));
  38. ui->labelFilteredImg->setText("No Effect Applied");
  39. ui->labelFilteredImg->setAlignment(Qt::AlignCenter);
  40. }
  41. }
  42. void MainWindow::on_pushButtonApplyFilter_clicked()
  43. {
  44. if(filename.isNull())
  45. {
  46. QMessageBox msgBox;
  47. msgBox.setText("No image has been selected!");
  48. msgBox.setInformativeText("Please select an image by clicking on the \"Open Image\" button...");
  49. msgBox.setStandardButtons(QMessageBox::Ok);
  50. msgBox.setDefaultButton(QMessageBox::Ok);
  51. msgBox.exec();
  52. }
  53. else
  54. {
  55. QImage image(filename);
  56. if(!ui->comboBoxFilters->currentText().compare("Box"))
  57. {
  58. filteredImage=boxFilter(image);
  59. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  60. }
  61. else if(!ui->comboBoxFilters->currentText().compare("Sobel Module"))
  62. {
  63. filteredImage=sobelModuleFilter(image);
  64. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  65. }
  66. else if(!ui->comboBoxFilters->currentText().compare("Sharpening"))
  67. {
  68. filteredImage=sharpeningFilter(image);
  69. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  70. }
  71. else if(!ui->comboBoxFilters->currentText().compare("Kirsch"))
  72. {
  73. filteredImage=kirschFilter(image);
  74. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  75. }
  76. else if(!ui->comboBoxFilters->currentText().compare("Sobel Phase"))
  77. {
  78. filteredImage=sobelPhaseFilter(image);
  79. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  80. }
  81. else if(!ui->comboBoxFilters->currentText().compare("Roberts Module"))
  82. {
  83. filteredImage=robertsModuleFilter(image);
  84. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  85. }
  86. else if(!ui->comboBoxFilters->currentText().compare("Roberts Phase"))
  87. {
  88. filteredImage=robertsPhaseFilter(image);
  89. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  90. }
  91. else if(!ui->comboBoxFilters->currentText().compare("3/9 Filter"))
  92. {
  93. filteredImage=threeNineFilter(image);
  94. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  95. }
  96. else if(!ui->comboBoxFilters->currentText().compare("Isotropic Module"))
  97. {
  98. filteredImage=isotropicModuleFilter(image);
  99. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  100. }
  101. else if(!ui->comboBoxFilters->currentText().compare("Isotropic Phase"))
  102. {
  103. filteredImage=isotropicPhaseFilter(image);
  104. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  105. }
  106. else if(!ui->comboBoxFilters->currentText().compare("Prewitt Module"))
  107. {
  108. filteredImage=prewittModuleFilter(image);
  109. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  110. }
  111. else if(!ui->comboBoxFilters->currentText().compare("Prewitt Phase"))
  112. {
  113. filteredImage=prewittPhaseFilter(image);
  114. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  115. }
  116. else if(!ui->comboBoxFilters->currentText().compare("Gaussian Filter"))
  117. {
  118. filteredImage=gaussianFilter(image);
  119. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  120. }
  121. else if(!ui->comboBoxFilters->currentText().compare("Median Filter"))
  122. {
  123. filteredImage=medianFilter(image);
  124. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  125. }
  126. else if(!ui->comboBoxFilters->currentText().compare("Laplacian Filter"))
  127. {
  128. filteredImage=laplacianFilter(image);
  129. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  130. }
  131. else if(!ui->comboBoxFilters->currentText().compare("Rank Filter"))
  132. {
  133. DialogSelRank mDial(this);
  134. int rankOrder=3;
  135. mDial.setModal(true);
  136. if(mDial.exec()==QDialog::Accepted)
  137. {
  138. rankOrder=mDial.getRankValue();
  139. }
  140. filteredImage=rankFilter(image,rankOrder);
  141. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  142. }
  143. else if(!ui->comboBoxFilters->currentText().compare("DoG (Difference of Gaussians)"))
  144. {
  145. DialogSelVarDog mDial(this);
  146. QVector<float> var;
  147. mDial.setModal(true);
  148. if(mDial.exec()==QDialog::Accepted)
  149. {
  150. var=mDial.getFirstValue();
  151. }
  152. filteredImage=DoGFilter(image,var.value(0),var.value(1));
  153. var.clear();
  154. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  155. }
  156. else if(!ui->comboBoxFilters->currentText().compare("Nagao Matsuyama Filter"))
  157. {
  158. filteredImage=nagaoFilter(image);
  159. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  160. }
  161. else if(!ui->comboBoxFilters->currentText().compare("Uniform Noise"))
  162. {
  163. DialogPercentageNoise mDial(this);
  164. int percOfNoise=-1;
  165. mDial.setModal(true);
  166. if(percOfNoise==-1)
  167. {
  168. percOfNoise=0;
  169. }
  170. if(mDial.exec()==QDialog::Accepted)
  171. {
  172. percOfNoise=mDial.getPercOfNoise();
  173. }
  174. filteredImage=uniformNoise(image,percOfNoise);
  175. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  176. }
  177. else if(!ui->comboBoxFilters->currentText().compare("Gaussian Noise"))
  178. {
  179. DialogSelGaussianNoise mDial(this);
  180. float mean=0;
  181. float variance=100;
  182. mDial.setModal(true);
  183. if(mDial.exec()==QDialog::Accepted)
  184. {
  185. variance=mDial.getGaussianNoiseVariance();
  186. mean=mDial.getGaussianNoiseMean();
  187. }
  188. filteredImage=gaussianNoise(image,mean,variance);
  189. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  190. }
  191. else if(!ui->comboBoxFilters->currentText().compare("Salt and Pepper Noise"))
  192. {
  193. DialogPercentageNoise mDial(this);
  194. int percOfNoise=-1;
  195. mDial.setModal(true);
  196. if(mDial.exec()==QDialog::Accepted)
  197. {
  198. percOfNoise=mDial.getPercOfNoise();
  199. }
  200. if(percOfNoise==-1)
  201. {
  202. percOfNoise=0;
  203. }
  204. filteredImage=saltPepperNoise(image,percOfNoise);
  205. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  206. }
  207. else if(!ui->comboBoxFilters->currentText().compare("Impulse Noise"))
  208. {
  209. DialogPercentageNoise mDial(this);
  210. int percOfNoise=-1;
  211. mDial.setModal(true);
  212. if(mDial.exec()==QDialog::Accepted)
  213. {
  214. percOfNoise=mDial.getPercOfNoise();
  215. }
  216. if(percOfNoise==-1)
  217. {
  218. percOfNoise=0;
  219. }
  220. filteredImage=impulseNoise(image,percOfNoise);
  221. ui->labelFilteredImg->setPixmap(QPixmap::fromImage(filteredImage));
  222. }
  223. else
  224. {
  225. QImage nullImage;
  226. filteredImage=nullImage;
  227. ui->labelFilteredImg->setText("No Effect Applied");
  228. ui->labelFilteredImg->setAlignment(Qt::AlignCenter);
  229. }
  230. }
  231. }
  232. void MainWindow::on_pushButtonSaveImg_clicked()
  233. {
  234. QString filenameWritten="";
  235. if(!filename.compare(""))
  236. {
  237. QMessageBox msgBox;
  238. msgBox.setText("No image was opened");
  239. msgBox.setStandardButtons(QMessageBox::Ok);
  240. msgBox.setDefaultButton(QMessageBox::Ok);
  241. msgBox.exec();
  242. filenameWritten.clear();
  243. }
  244. else if(filteredImage.isNull())
  245. {
  246. QMessageBox msgBox;
  247. msgBox.setText("No effect has been applied");
  248. msgBox.setInformativeText("Please be sure to apply an effect to an image before saving and to confirm by clicking on the \"Save\" button...");
  249. msgBox.setStandardButtons(QMessageBox::Ok);
  250. msgBox.setDefaultButton(QMessageBox::Ok);
  251. msgBox.exec();
  252. }
  253. else if(!ui->labelFilteredImg->text().compare("No Effect Applied"))
  254. {
  255. QMessageBox msgBox;
  256. msgBox.setText("No effect has been applied");
  257. msgBox.setInformativeText("Please be sure to apply an effect to an image before saving and to confirm by clicking on the \"Save\" button...");
  258. msgBox.setStandardButtons(QMessageBox::Ok);
  259. msgBox.setDefaultButton(QMessageBox::Ok);
  260. msgBox.exec();
  261. }
  262. else
  263. {
  264. filenameWritten = QFileDialog::getSaveFileName(this,"Save File",QDir::currentPath(),"Image pgm (*.pgm)");
  265. if(!(filenameWritten.endsWith(".pgm") || filenameWritten.endsWith(".PGM")) && filenameWritten.compare("")!=0)
  266. {
  267. filenameWritten=filenameWritten+".pgm";
  268. }
  269. if(filteredImage.save(filenameWritten) && filenameWritten.compare("")!=0)
  270. {
  271. QMessageBox msgBox;
  272. msgBox.setText("The filtered image has been saved.");
  273. msgBox.setStandardButtons(QMessageBox::Ok);
  274. msgBox.setDefaultButton(QMessageBox::Ok);
  275. msgBox.exec();
  276. filenameWritten="";
  277. }
  278. else
  279. {
  280. QMessageBox msgBox;
  281. msgBox.setText("No image was saved");
  282. msgBox.setInformativeText("Please be sure to apply an effect to an image before saving and to confirm by clicking on the \"Save\" button...");
  283. msgBox.setStandardButtons(QMessageBox::Ok);
  284. msgBox.setDefaultButton(QMessageBox::Ok);
  285. msgBox.exec();
  286. }
  287. }
  288. }
  289. void MainWindow::on_actionAbout_triggered()
  290. {
  291. DialogAbout mDial(this);
  292. mDial.setModal(true);
  293. mDial.exec();
  294. }