Advertisement
Guest User

Untitled

a guest
May 25th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.10 KB | None | 0 0
  1. void calcul_histo() {
  2. Mat src;
  3. char fname[MAX_PATH];
  4.  
  5. while (openFileDlg(fname))
  6. {
  7. src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  8.  
  9. int h[256] = { 0 };
  10. int M = src.rows * src.cols;
  11.  
  12. for (int i = 0; i < src.rows; i++) {
  13. for (int j = 0; j < src.cols; j++) {
  14. uchar g = src.at<uchar>(i, j);
  15. h[g] ++;
  16. }
  17. }
  18.  
  19. showHistogram("Histo", h, 255, 200);
  20. imshow("Sursa", src);
  21.  
  22. float p[256] = { 0.0f };
  23. for (int g = 0; g < 256; g++) {
  24. p[g] = (float)h[g] / M;
  25. }
  26.  
  27. float medie = 0.0f;
  28.  
  29. for (int g = 0; g < 256; g++) {
  30. medie += g * p[g];
  31. }
  32.  
  33. printf("Medie = %.2f\n", medie);
  34.  
  35. float variance = 0.0f;
  36. for (int g = 0; g < 256; g++)
  37. variance += (g - medie) * (g - medie) * p[g];
  38. float sigma = sqrt(variance);
  39. printf("Deviatia standard = %.2f\n\n", sigma);
  40.  
  41. waitKey(0);
  42. }
  43. }
  44.  
  45. void binarizare_automata() {
  46.  
  47. Mat src;
  48. char fname[MAX_PATH];
  49. int iMin = 0, iMax = 0;
  50. while (openFileDlg(fname))
  51. {
  52. src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  53. Mat dst = src.clone();
  54.  
  55. int h[256] = { 0 };
  56. int M = src.rows * src.cols;
  57.  
  58. for (int i = 0; i < src.rows; i++) {
  59. for (int j = 0; j < src.cols; j++) {
  60. uchar g = src.at<uchar>(i, j);
  61. h[g] ++;
  62. }
  63. }
  64.  
  65. for (int g = 0; g < 255; g++) {
  66. if (h[g] != 0) {
  67. iMin = g; //val intensitate minima
  68. break;
  69. }
  70. }
  71.  
  72. for (int g = 255; g > 0; g--) {
  73. if (h[g] != 0) {
  74. iMax = g; //val intensitate maxima
  75. break;
  76. }
  77. }
  78.  
  79. float T1 = 0.0f, T2 = 0.0f;
  80. float medieG1 = 0.0f, medieG2 = 0.0f;
  81. int n1 = 0, n2 = 0;
  82. int first = 0;
  83.  
  84.  
  85. T1 = (float)(iMin + iMax) / 2;
  86. T2 = T1 + 1.0f;
  87.  
  88. while (T2 - T1 > 0.1) {
  89. if (first == 0)
  90. first++;
  91. else T1 = T2;
  92.  
  93. n1 = n2 = 0;
  94.  
  95. for (int f = iMin; f <= (int)T1; f++)
  96. {
  97. medieG1 += f*h[f];
  98. n1 += h[f];
  99. }
  100.  
  101. medieG1 = ((float)1 / n1) * medieG1;
  102.  
  103. for (int f = (int)T1 + 1; f <= iMax; f++)
  104. {
  105. medieG2 += f*h[f];
  106. n2 += h[f];
  107. }
  108. medieG2 = ((float)1 / n2) * medieG2;
  109.  
  110. T2 = (float)(medieG1 + medieG2) / 2;
  111. }
  112.  
  113. printf("prag = %f\n", T2);
  114. int T = (int)T2;
  115.  
  116. for (int i = 0; i < src.rows; i++)
  117. {
  118. for (int j = 0; j < src.cols; j++)
  119. {
  120. if (src.at<uchar>(i, j) <= T)
  121. dst.at<uchar>(i, j) = 0;
  122. else dst.at<uchar>(i, j) = 255;
  123. }
  124. }
  125.  
  126. imshow("Sursa", src);
  127. imshow("Destinatie", dst);
  128.  
  129. waitKey(0);
  130. }
  131.  
  132. }
  133.  
  134. void modificare_contrast() {
  135. Mat src;
  136. int iMin = 0, iMax = 0;
  137. int gInMin = 0, gInMax = 0;
  138. // Read image from file
  139. char fname[MAX_PATH];
  140.  
  141. while (openFileDlg(fname))
  142. {
  143. src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  144. Mat dst = src.clone();
  145.  
  146. int h[256] = { 0 };
  147.  
  148. for (int i = 0; i < src.rows; i++)
  149. {
  150. for (int j = 0; j < src.cols; j++)
  151. {
  152. uchar g = src.at<uchar>(i, j);
  153. h[g]++;
  154. }
  155. }
  156.  
  157. showHistogram("Src Hist", h, 255, 200);
  158.  
  159.  
  160. for (int g = 0; g < 255; g++) {
  161. if (h[g] != 0) {
  162. gInMin = g; //val intensitate minima
  163. break;
  164. }
  165. }
  166.  
  167. for (int g = 255; g > 0; g--) {
  168. if (h[g] != 0) {
  169. gInMax = g; //val intensitate maxima
  170. break;
  171. }
  172. }
  173.  
  174. int gOutMin = 0, gOutMax = 0;
  175. int gAux = 0;
  176.  
  177. printf("gOutMin = "); scanf("%d", &gOutMin);
  178. printf("gOutMax = "); scanf("%d", &gOutMax);
  179.  
  180.  
  181.  
  182. for (int i = 0; i < src.rows; i++)
  183. {
  184. for (int j = 0; j < src.cols; j++)
  185. {
  186. gAux = gOutMin + (src.at<uchar>(i, j) - gInMin) * (gOutMax - gOutMin) / (gInMax - gInMin);
  187.  
  188. if (gAux > 255)
  189. gAux = 255;
  190. else if (gAux < 0)
  191. gAux = 0;
  192.  
  193. dst.at<uchar>(i, j) = gAux;
  194. }
  195. }
  196.  
  197. int hd[256] = { 0 };
  198.  
  199. for (int i = 0; i < src.rows; i++)
  200. {
  201. for (int j = 0; j < src.cols; j++)
  202. {
  203. uchar g = dst.at<uchar>(i, j);
  204. hd[g]++;
  205. }
  206. }
  207.  
  208. showHistogram("Hist Destinatie", hd, 255, 200);
  209.  
  210. imshow("Img sursa", src);
  211. imshow("Img destinatie", dst);
  212.  
  213. waitKey(0);
  214. }
  215. }
  216.  
  217. void corectie_gamma()
  218. {
  219. Mat src;
  220. // Read image from file
  221. char fname[MAX_PATH];
  222.  
  223. while (openFileDlg(fname))
  224. {
  225. src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  226. Mat dst = src.clone();
  227.  
  228. float gamma = 0.0f;
  229.  
  230. printf("gamma = "); scanf("%f", &gamma);
  231.  
  232. int h[256] = { 0 };
  233.  
  234. for (int i = 0; i < src.rows; i++)
  235. {
  236. for (int j = 0; j < src.cols; j++)
  237. {
  238. uchar g = src.at<uchar>(i, j);
  239. h[g]++;
  240. }
  241. }
  242.  
  243. showHistogram("Src Hist", h, 255, 200);
  244.  
  245. int g = 0;
  246. int gAux = 0;
  247. for (int i = 0; i < src.rows; i++)
  248. {
  249. for (int j = 0; j < src.cols; j++)
  250. {
  251. g = src.at<uchar>(i, j);
  252. gAux = 255 * pow((float)g / 255, gamma);
  253.  
  254. if (gAux > 255) gAux = 255;
  255. else if (gAux < 0) gAux = 0;
  256.  
  257. dst.at<uchar>(i, j) = gAux;
  258. }
  259. }
  260.  
  261. int hd[256] = { 0 };
  262.  
  263. for (int i = 0; i < src.rows; i++)
  264. {
  265. for (int j = 0; j < src.cols; j++)
  266. {
  267. uchar g = dst.at<uchar>(i, j);
  268. hd[g]++;
  269. }
  270. }
  271.  
  272. showHistogram("Hist Destinatie", hd, 255, 200);
  273.  
  274. imshow("Img sursa", src);
  275. imshow("Img destinatie", dst);
  276.  
  277. waitKey(0);
  278. }
  279. }
  280.  
  281. void egalizare_histograma(){
  282. Mat src;
  283. char fname[MAX_PATH];
  284.  
  285. while (openFileDlg(fname))
  286. {
  287. src = imread(fname, CV_LOAD_IMAGE_GRAYSCALE);
  288. Mat dst = src.clone();
  289.  
  290. int h[256] = { 0 };
  291. int M = src.rows * src.cols;
  292.  
  293. for (int i = 0; i < src.rows; i++)
  294. {
  295. for (int j = 0; j < src.cols; j++)
  296. {
  297. uchar g = src.at<uchar>(i, j);
  298. h[g]++;
  299. }
  300. }
  301.  
  302. showHistogram("Src Hist", h, 255, 200);
  303. int hc[256] = { 0 };
  304.  
  305. hc[0] = h[0];
  306. for (int g = 1; g < 256; g++)
  307. {
  308. hc[g] = hc[g - 1] + h[g];
  309. }
  310.  
  311. showHistogram("Hist Cumulativa", hc, 255, 200);
  312.  
  313. int tab[256] = { 0 };
  314. for (int g = 0; g < 256; g++)
  315. {
  316. tab[g] = 255 * hc[g] / M;
  317. }
  318.  
  319. for (int i = 0; i < src.rows; i++)
  320. {
  321. for (int j = 0; j < src.cols; j++)
  322. {
  323. dst.at<uchar>(i, j) = tab[src.at<uchar>(i, j)];
  324. }
  325. }
  326.  
  327. int hd[256] = { 0 };
  328.  
  329. for (int i = 0; i < src.rows; i++)
  330. {
  331. for (int j = 0; j < src.cols; j++)
  332. {
  333. uchar g = dst.at<uchar>(i, j);
  334. hd[g]++;
  335. }
  336. }
  337.  
  338. showHistogram("Hist Destinatie", hd, 255, 200);
  339.  
  340. imshow("Sursa", src);
  341. imshow("Destinatie", dst);
  342. waitKey(0);
  343. }
  344. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement