Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.92 KB | None | 0 0
  1. #include "lipa.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <conio.h>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. struct lista
  10. {
  11. int liczba;
  12. lista *next;
  13. };
  14.  
  15. void rgbtogray(Image3CH& rgbImg, Image1CH& grayImg) // Zamiana obrazu z kolorowego na monochromatyczny (skala szarości, brak uwzglednienia czerwonego dla lepszego kontrastu)
  16. {
  17.  
  18. if (rgbImg.width() == grayImg.width() && rgbImg.height() == grayImg.height())
  19. {
  20. for (int i = 0; i < rgbImg.width(); i++)
  21. {
  22. for (int j = 0; j < rgbImg.height(); j++)
  23. {
  24. grayImg(i, j).Intensity() = (rgbImg(i, j).Green() + rgbImg(i, j).Blue()) / 2;
  25.  
  26. }
  27. }
  28. }
  29. else
  30. {
  31. cerr << "Rozne rozmiary obrazow!" << endl;
  32. return;
  33. }
  34. }
  35.  
  36. void filtrmedianowy(Image1CH& in, Image1CH& out, int rozmiar) // Pozbycie się noisa
  37. {
  38. double *T = new double[rozmiar*rozmiar];
  39. int indeks = 0;
  40. int promien = (rozmiar - 1) / 2;
  41. double min = 1;
  42. double pom = 0;
  43. int wsk = 0;
  44.  
  45. for (int i = promien; i < in.width() - promien; i++)
  46. {
  47. for (int j = promien; j < in.height() - promien; j++)
  48. {
  49. for (int p = -promien; p < promien + 1; p++)
  50. {
  51. for (int q = -promien; q < promien + 1; q++)
  52. {
  53. T[indeks] = in(i + p, j + q).Intensity();
  54. indeks++;
  55. }
  56. }
  57.  
  58. indeks = 0;
  59.  
  60. for (int k = 0; k < rozmiar*rozmiar; k++)
  61. {
  62. pom = T[k];
  63. for (int l = k; l < rozmiar*rozmiar; l++)
  64. {
  65. if (T[l] <= min)
  66. {
  67. min = T[l];
  68. wsk = l;
  69. }
  70. }
  71. T[k] = T[wsk];
  72. T[wsk] = pom;
  73. min = 1;
  74. }
  75.  
  76. out(i, j).Intensity() = T[((rozmiar*rozmiar) - 1) / 2];
  77.  
  78. }
  79. }
  80. delete[] T;
  81. }
  82.  
  83. void binaryzacja(Image1CH& in, Image1CH& out) // Binaryzacja z wyznaczeniem progu
  84. {
  85. double p = 0;
  86. double min1 = 1;
  87. double max = 0;
  88.  
  89. for (int i = 0; i < in.width(); i++)
  90. {
  91. for (int j = 0; j < in.height(); j++)
  92. {
  93. if (in(i, j).Intensity() > max)
  94. {
  95. max = in(i, j).Intensity();
  96. }
  97. if (in(i, j).Intensity() < min1)
  98. {
  99. min1 = in(i, j).Intensity();
  100. }
  101. }
  102. }
  103.  
  104. p = ((max - min1) / 2) - 0.05;
  105.  
  106. for (int i = 1; i < in.width() - 1; i++)
  107. {
  108. for (int j = 1; j < in.height() - 1; j++)
  109. {
  110. if (in(i, j).Intensity() > p)
  111. {
  112. out(i, j).Intensity() = 1;
  113. }
  114. else
  115. {
  116. out(i, j).Intensity() = 0;
  117. }
  118. }
  119. }
  120. for (int a = 0; a < in.width(); a++)
  121. {
  122. out(a, 0).Intensity() = 0;
  123. out(a, in.height() - 1).Intensity() = 0;
  124. out(a, 1).Intensity() = 0;
  125. out(a, in.height() - 2).Intensity() = 0;
  126. }
  127. for (int b = 0; b < in.height(); b++)
  128. {
  129. out(0, b).Intensity() = 0;
  130. out(in.width() - 1, b).Intensity() = 0;
  131. out(1, b).Intensity() = 0;
  132. out(in.width() - 2, b).Intensity() = 0;
  133. }
  134. }
  135.  
  136. void dylatacja(Image1CH& in, Image1CH& out)
  137. {
  138. bool zmiana = false;
  139. for (int i = 1; i < in.width() - 1; i++)
  140. {
  141. for (int j = 1; j < in.height() - 1; j++)
  142. {
  143. if (in(i, j).Intensity() == 1)
  144. {
  145. for (int p = -1; p < 2; p++)
  146. {
  147. for (int q = -1; q < 2; q++)
  148. {
  149. if (in(i + p, j + q).Intensity() == 0)
  150. {
  151. zmiana = true;
  152. }
  153. }
  154. }
  155. }
  156. if (zmiana == true)
  157. {
  158. out(i, j).Intensity() = 0;
  159. }
  160. else
  161. {
  162. out(i, j).Intensity() = in(i, j).Intensity();
  163. }
  164. zmiana = false;
  165. }
  166. }
  167. }
  168.  
  169. void erozja(Image1CH& in, Image1CH& out)
  170. {
  171. bool zmiana = false;
  172. for (int i = 1; i < in.width() - 1; i++)
  173. {
  174. for (int j = 1; j < in.height() - 1; j++)
  175. {
  176. if (in(i, j).Intensity() == 0)
  177. {
  178. for (int p = -1; p < 2; p++)
  179. {
  180. for (int q = -1; q < 2; q++)
  181. {
  182. if (in(i + p, j + q).Intensity() == 1)
  183. {
  184. zmiana = true;
  185. }
  186. }
  187. }
  188. }
  189. if (zmiana == true)
  190. {
  191. out(i, j).Intensity() = 1;
  192. }
  193. else
  194. {
  195. out(i, j).Intensity() = in(i, j).Intensity();
  196. }
  197. zmiana = false;
  198. }
  199. }
  200. }
  201.  
  202. void segmentacja(Image1CH& in, int** out, bool tryb) // segmentacja top down, bottom up, top down
  203. {
  204. int a = 1;
  205. double szukana = 0;
  206.  
  207. if (tryb == 1)
  208. {
  209. szukana = 1;
  210. }
  211. if (tryb == 0)
  212. {
  213. szukana = 0;
  214. }
  215. for (int i = 0; i < in.width(); i++)
  216. {
  217. for (int j = 0; j < in.height(); j++)
  218. {
  219. if (in(i, j).Intensity() == szukana)
  220. {
  221. out[i][j] = a;
  222. a++;
  223. }
  224. else
  225. {
  226. out[i][j] = 0;
  227. }
  228. }
  229. }
  230.  
  231. int min = in.width()*in.height();
  232.  
  233. for (int i = 1; i < in.width() - 1; i++)
  234. {
  235. for (int j = 1; j < in.height() - 1; j++)
  236. {
  237. for (int p = -1; p < 2; p++)
  238. {
  239. for (int q = -1; q < 2; q++)
  240. {
  241. if (out[i + p][j + q] < min && out[i + p][j + q] != 0)
  242. {
  243. min = out[i + p][j + q];
  244. }
  245. }
  246. }
  247. for (int k = -1; k < 2; k++)
  248. {
  249. for (int l = -1; l < 2; l++)
  250. {
  251. if (out[i + k][j + l] != 0)
  252. {
  253. out[i + k][j + l] = min;
  254. }
  255. }
  256. }
  257. min = in.width()*in.height();
  258. }
  259. }
  260.  
  261. min = in.width()*in.height();
  262.  
  263. for (int i = in.width() - 2; i > 0; i--)
  264. {
  265. for (int j = in.height() - 2; j > 0; j--)
  266. {
  267. for (int p = 1; p > -2; p--)
  268. {
  269. for (int q = 1; q > -2; q--)
  270. {
  271. if (out[i + p][j + q] < min && out[i + p][j + q] != 0)
  272. {
  273. min = out[i + p][j + q];
  274. }
  275. }
  276. }
  277.  
  278. for (int k = 1; k > -2; k--)
  279. {
  280. for (int l = 1; l > -2; l--)
  281. {
  282. if (out[i + k][j + l] != 0)
  283. {
  284. out[i + k][j + l] = min;
  285. }
  286. }
  287. }
  288.  
  289. min = in.width()*in.height();
  290.  
  291.  
  292. }
  293. }
  294.  
  295. min = in.width()*in.height();
  296.  
  297. for (int i = 1; i < in.width() - 1; i++)
  298. {
  299. for (int j = 1; j < in.height() - 1; j++)
  300. {
  301. for (int p = -1; p < 2; p++)
  302. {
  303. for (int q = -1; q < 2; q++)
  304. {
  305. if (out[i + p][j + q] < min && out[i + p][j + q] != 0)
  306. {
  307. min = out[i + p][j + q];
  308. }
  309. }
  310. }
  311. for (int k = -1; k < 2; k++)
  312. {
  313. for (int l = -1; l < 2; l++)
  314. {
  315. if (out[i + k][j + l] != 0)
  316. {
  317. out[i + k][j + l] = min;
  318. }
  319. }
  320. }
  321. min = in.width()*in.height();
  322. }
  323. }
  324.  
  325.  
  326. }
  327.  
  328. void segregacja(Image1CH& in, int** T, lista *g, lista *g1, bool kol) // Zapisanie do jednej listy wszystkich elementow, a do drugiej tych ktore nas interesuja
  329. {
  330. lista *p = g;
  331. lista *p1 = g;
  332. lista *p2 = g;
  333. lista *p3 = g;
  334.  
  335. lista *pomo1 = g1;
  336. lista *pomo2 = g1;
  337. lista *pomo3 = g1;
  338.  
  339. bool x = 0;
  340. bool y = 0;
  341. int licznik = 0;
  342. int licznik1 = 0;
  343. int minimum = 1300;
  344. int aku = 0;
  345.  
  346. for (int i = 0; i < in.width(); i++)
  347. {
  348. for (int j = 0; j < in.height(); j++)
  349. {
  350. do
  351. {
  352. if (T[i][j] == p->liczba)
  353. {
  354. x = 1;
  355. }
  356. p = p->next;
  357. } while (p != 0);
  358. p = g;
  359. if (x == 0)
  360. {
  361. p1->liczba = T[i][j];
  362. p1->next = new lista;
  363. p1 = p1->next;
  364. p1->liczba = 0;
  365. p1->next = 0;
  366. }
  367. x = 0;
  368. }
  369. }
  370. while (p2 != 0)
  371. {
  372. if (p2->liczba > 0 && p2->liczba != 0)
  373. {
  374. licznik++;
  375. cerr << p2->liczba << '\t';
  376. }
  377. p2 = p2->next;
  378. }
  379. if (kol == 1)
  380. {
  381. cerr << endl << "Wykryto " << licznik << " bialych elementow" << endl;
  382. }
  383. if (kol == 0)
  384. {
  385. cerr << endl << "Wykryto " << licznik << " czarnych elementow" << endl;
  386. }
  387.  
  388.  
  389. while (p3 != 0)
  390. {
  391. if (p3->liczba > 0)
  392. {
  393. for (int u = 0; u < in.width(); u++)
  394. {
  395. for (int v = 0; v < in.height(); v++)
  396. {
  397. if (T[u][v] == p3->liczba)
  398. {
  399. aku++;
  400. }
  401. }
  402. }
  403. if (aku < minimum)
  404. {
  405. for (int k = 0; k < in.width(); k++)
  406. {
  407. for (int l = 0; l < in.height(); l++)
  408. {
  409. if (T[k][l] == p3->liczba)
  410. {
  411. T[k][l] = 0;
  412. }
  413. }
  414. }
  415. }
  416. }
  417. aku = 0;
  418. p3 = p3->next;
  419. }
  420.  
  421.  
  422. for (int n = 0; n < in.width(); n++)
  423. {
  424. for (int m = 0; m < in.height(); m++)
  425. {
  426. do
  427. {
  428. if (T[n][m] == pomo1->liczba)
  429. {
  430. y = 1;
  431. }
  432. pomo1 = pomo1->next;
  433. } while (pomo1 != 0);
  434.  
  435. pomo1 = g1;
  436. if (y == 0)
  437. {
  438. if (kol == 1)
  439. {
  440.  
  441. pomo2->liczba = T[n][m];
  442. pomo2->next = new lista;
  443. pomo2 = pomo2->next;
  444. pomo2->liczba = 0;
  445. pomo2->next = 0;
  446. }
  447. else if (kol == 0)
  448. {
  449. if (T[n][m] != 1)
  450. {
  451. pomo2->liczba = T[n][m];
  452. pomo2->next = new lista;
  453. pomo2 = pomo2->next;
  454. pomo2->liczba = 0;
  455. pomo2->next = 0;
  456. }
  457. }
  458. }
  459. y = 0;
  460. }
  461. }
  462. while (pomo3 != 0)
  463. {
  464. if (pomo3->liczba > 0 && pomo3->liczba != 0)
  465. {
  466. licznik1++;
  467. cerr << pomo3->liczba << '\t';
  468. }
  469. pomo3 = pomo3->next;
  470. }
  471. cerr << endl;
  472. if (kol == 1)
  473. {
  474. cerr << endl << endl << "Wykryto " << licznik1 << " docelowych bialych elementow" << endl << endl;
  475. }
  476. if (kol == 0)
  477. {
  478. cerr << endl << endl << "Wykryto " << licznik1 << " docelowych czarnych elementow" << endl << endl;
  479. }
  480.  
  481. }
  482. void przynaleznosc(int & f1, int & f2, int & f3, int & f4, int & f1k, int & f2k, int & f3k, int & f4k, lista *gc, lista *gb, int** Tc, int** Tb, Image1CH& in, Image3CH& kolor) // Sprawdzenie na jakiej karcie lezy badany element, zliczenie go i rozpoznanie
  483. {
  484. lista *pomc = gc;
  485. lista *pomb = gb;
  486. bool x = 0;
  487. double srednia = 0;
  488. double suma = 0;
  489. int d = 0;
  490. int szerokosc = 0;
  491. int k = 3;
  492. int progs = 53;
  493. double progr = 0.3;
  494.  
  495. while (pomc->next->next != 0)
  496. {
  497. for (int i = 3; i < in.width() - 3; i++)
  498. {
  499. for (int j = 3; j < in.height() - 3; j++)
  500. {
  501. if (Tc[i][j] == pomc->next->liczba)
  502. {
  503.  
  504. for (int k = -2; k < 3; k++)
  505. {
  506. for (int l = -2; l < 3; l++)
  507. {
  508. if (Tc[i + k][j + l] == 0 && x == 0)
  509. {
  510. if (pomb->next->liczba == Tb[i + k][j + l])
  511. {
  512. for (int n = 1; n < 4; n++)
  513. {
  514. for (int m = 1; m < 4; m++)
  515. {
  516. if (kolor(i + n, j + m).Red() != 1 && Tc[i + n, j + m] != 0)
  517. {
  518. suma = suma + kolor(i + n, j + m).Red();
  519. d++;
  520. }
  521.  
  522.  
  523. }
  524. }
  525. srednia = suma / d;
  526. if (srednia < progr)
  527. {
  528. f1k = 1;
  529. }
  530. if (srednia >= progr)
  531. {
  532.  
  533. for (int u = 3; u < in.width() - 3; u++)
  534. {
  535. for (int v = 3; v < in.height() - 3; v++)
  536. {
  537. if (Tc[u][v] != 0 && Tc[u][v] != 1 && Tb[u - 1][v] == pomb->next->liczba)
  538. {
  539. for (int z = 0; z < 100; z++)
  540. {
  541. if (Tc[u + z][v] == Tc[u][v])
  542. {
  543. szerokosc++;
  544. }
  545. }
  546. u = in.width();
  547. v = in.height();
  548. }
  549. }
  550. }
  551. if (szerokosc < progs)
  552. {
  553. f1k = 3;
  554. }
  555. if (szerokosc >= progs)
  556. {
  557. f1k = 2;
  558. }
  559. szerokosc = 0;
  560. k = 1;
  561.  
  562. }
  563. d = 0;
  564. suma = 0;
  565. srednia = 0;
  566. f1++;
  567. }
  568. else if (pomb->next->next->liczba == Tb[i + k][j + l])
  569. {
  570. for (int n = 1; n < 4; n++)
  571. {
  572. for (int m = 1; m < 4; m++)
  573. {
  574. if (kolor(i + n, j + m).Red() != 1 && Tc[i + n, j + m] != 0)
  575. {
  576. suma = suma + kolor(i + n, j + m).Red();
  577. d++;
  578. }
  579.  
  580.  
  581. }
  582. }
  583. srednia = suma / d;
  584. if (srednia < progr)
  585. {
  586. f2k = 1;
  587. }
  588. if (srednia >= progr)
  589. {
  590.  
  591. for (int u = 3; u < in.width() - 3; u++)
  592. {
  593. for (int v = 3; v < in.height() - 3; v++)
  594. {
  595. if (Tc[u][v] != 0 && Tc[u][v] != 1 && Tb[u - 1][v] == pomb->next->next->liczba)
  596. {
  597. for (int z = 0; z < 100; z++)
  598. {
  599. if (Tc[u + z][v] == Tc[u][v])
  600. {
  601. szerokosc++;
  602. }
  603. }
  604.  
  605. u = in.width();
  606. v = in.height();
  607. }
  608. }
  609. }
  610. if (szerokosc < progs)
  611. {
  612. f2k = 3;
  613. }
  614. if (szerokosc >= progs)
  615. {
  616. f2k = 2;
  617. }
  618. szerokosc = 0;
  619. k = 1;
  620.  
  621. }
  622. d = 0;
  623. suma = 0;
  624. srednia = 0;
  625. f2++;
  626. }
  627. else if (pomb->next->next->next->liczba == Tb[i + k][j + l])
  628. {
  629. for (int n = 1; n < 4; n++)
  630. {
  631. for (int m = 1; m < 4; m++)
  632. {
  633. if (kolor(i + n, j + m).Red() != 1 && Tc[i + n, j + m] != 0)
  634. {
  635. suma = suma + kolor(i + n, j + m).Red();
  636. d++;
  637. }
  638.  
  639.  
  640. }
  641. }
  642. srednia = suma / d;
  643. if (srednia < progr)
  644. {
  645. f3k = 1;
  646. }
  647. if (srednia >= progr)
  648. {
  649.  
  650. for (int u = 3; u < in.width() - 3; u++)
  651. {
  652. for (int v = 3; v < in.height() - 3; v++)
  653. {
  654. if (Tc[u][v] != 0 && Tc[u][v] != 1 && Tb[u - 1][v] == pomb->next->next->next->liczba)
  655. {
  656. for (int z = 0; z < 100; z++)
  657. {
  658. if (Tc[u + z][v] == Tc[u][v])
  659. {
  660. szerokosc++;
  661. }
  662. }
  663. u = in.width();
  664. v = in.height();
  665. }
  666. }
  667. }
  668. if (szerokosc < progs)
  669. {
  670. f3k = 3;
  671. }
  672. if (szerokosc >= progs)
  673. {
  674. f3k = 2;
  675. }
  676. szerokosc = 0;
  677. k = 1;
  678.  
  679. }
  680. d = 0;
  681. suma = 0;
  682. srednia = 0;
  683. f3++;
  684. }
  685. else if (pomb->next->next->next->next->liczba == Tb[i + k][j + l])
  686. {
  687. for (int n = 1; n < 4; n++)
  688. {
  689. for (int m = 1; m < 4; m++)
  690. {
  691. if (kolor(i + n, j + m).Red() != 1 && Tc[i + n, j + m] != 0)
  692. {
  693. suma = suma + kolor(i + n, j + m).Red();
  694. d++;
  695. }
  696.  
  697.  
  698. }
  699. }
  700. srednia = suma / d;
  701. if (srednia < progr)
  702. {
  703. f4k = 1;
  704. }
  705. if (srednia >= progr)
  706. {
  707. for (int u = 3; u < in.width() - 3; u++)
  708. {
  709. for (int v = 3; v < in.height() - 3; v++)
  710. {
  711. if (Tc[u][v] != 0 && Tc[u][v] != 1 && Tb[u - 1][v] == pomb->next->next->next->next->liczba)
  712. {
  713. for (int z = 0; z < 100; z++)
  714. {
  715. if (Tc[u + z][v] == Tc[u][v])
  716. {
  717. szerokosc++;
  718. }
  719. }
  720. u = in.width();
  721. v = in.height();
  722. }
  723. }
  724. }
  725. if (szerokosc < progs)
  726. {
  727. f4k = 3;
  728. }
  729. if (szerokosc >= progs)
  730. {
  731. f4k = 2;
  732. }
  733. szerokosc = 0;
  734. k = 1;
  735. }
  736. d = 0;
  737. suma = 0;
  738. srednia = 0;
  739. f4++;
  740. }
  741. k = 3;
  742. l = 3;
  743. x = 1;
  744. }
  745. }
  746.  
  747. }
  748.  
  749. }
  750. }
  751. }
  752.  
  753. x = 0;
  754. pomc = pomc->next;
  755. }
  756. }
  757.  
  758. void wypisz(int c1, int c2, int c3, int c4, int k1, int k2, int k3, int k4) // Wypisanie wlasnosci kart
  759. {
  760. string kolor1;
  761. string kolor2;
  762. string kolor3;
  763. string kolor4;
  764.  
  765. if (k1 == 1)
  766. {
  767. kolor1 = "pik";
  768. }
  769. if (k1 == 2)
  770. {
  771. kolor1 = "kier";
  772. }
  773. if (k1 == 3)
  774. {
  775. kolor1 = "karo";
  776. }
  777.  
  778. if (k2 == 1)
  779. {
  780. kolor2 = "pik";
  781. }
  782. if (k2 == 2)
  783. {
  784. kolor2 = "kier";
  785. }
  786. if (k2 == 3)
  787. {
  788. kolor2 = "karo";
  789. }
  790.  
  791. if (k3 == 1)
  792. {
  793. kolor3 = "pik";
  794. }
  795. if (k3 == 2)
  796. {
  797. kolor3 = "kier";
  798. }
  799. if (k3 == 3)
  800. {
  801. kolor3 = "karo";
  802. }
  803.  
  804. if (k4 == 1)
  805. {
  806. kolor4 = "pik";
  807. }
  808. if (k4 == 2)
  809. {
  810. kolor4 = "kier";
  811. }
  812. if (k4 == 3)
  813. {
  814. kolor4 = "karo";
  815. }
  816.  
  817.  
  818. cerr << endl << "Pierwsza karta to: " << c1 << '\t' << kolor1 << endl;
  819. cerr << endl << "Druga karta to : " << c2 << '\t' << kolor2 << endl;
  820. cerr << endl << "Trzecia karta to : " << c3 << '\t' << kolor3 << endl;
  821. cerr << endl << "Czwarta karta to : " << c4 << '\t' << kolor4 << endl;
  822. }
  823.  
  824. void program(int f1, int f2, int f3, int f4) // Funkcja z zadania
  825. {
  826. double srednia = 0;
  827. double suma = 0;
  828. suma = f1 + f2 + f3 + f4;
  829. srednia = (suma) / 4;
  830. cerr << endl << "Srednia: " << srednia << endl;
  831. if (f1 > srednia)
  832. {
  833. cerr << endl << "Pierwsza karta ma wartosc wieksza od sredniej." << endl << endl;
  834. }
  835. if (f2 > srednia)
  836. {
  837. cerr << endl << "Druga karta ma wartosc wieksza od sredniej." << endl << endl;
  838. }
  839. if (f3 > srednia)
  840. {
  841. cerr << endl << "Trzecia karta ma wartosc wieksza od sredniej." << endl << endl;
  842. }
  843. if (f4 > srednia)
  844. {
  845.  
  846. }cerr << endl << "Czwarta karta ma wartosc wieksza od sredniej." << endl << endl;
  847. }
  848.  
  849.  
  850. int main()
  851. {
  852. Image3CH Colour(1928, 1448);
  853.  
  854. Image1CH Grayscale(1928, 1448);
  855. Image1CH Median(1928, 1448);
  856. Image1CH Binary(1928, 1448);
  857. Image1CH Binaryd1(1928, 1448);
  858. Image1CH Binaryd1e1(1928, 1448);
  859. Image1CH Binaryd1e2(1928, 1448);
  860. Image1CH Binaryd2e2(1928, 1448);
  861. Image1CH Binaryd2e3(1928, 1448);
  862. Image1CH Binaryd3e3(1928, 1448);
  863. Image1CH Binaryd4e3(1928, 1448);
  864. Image1CH BinaryMorfo(1928, 1448);
  865.  
  866. int obraz = 1;
  867.  
  868. cerr << "Wpisz liczbe, aby wczytac odpowiedni obraz" << endl << "1 - Idealny" << endl << "2 - Noised" << endl << "3 - Gradient" << endl << "4 - Blurred" << endl << endl;
  869. cin >> obraz;
  870. cerr << endl << endl;
  871. while (obraz != 1 && obraz != 2 && obraz != 3 && obraz != 4)
  872. {
  873. cerr << endl << "Nieprawidlowa liczba, wpisz ponownie:" << endl;
  874. cin >> obraz;
  875. cerr << endl;
  876. }
  877.  
  878. if (obraz == 1)
  879. {
  880. Colour.LoadImage("img\\ideal.png", LPL_LOAD_FITTED);
  881. }
  882. if (obraz == 2)
  883. {
  884. Colour.LoadImage("img\\noised.png", LPL_LOAD_FITTED);
  885. }
  886. if (obraz == 3)
  887. {
  888. Colour.LoadImage("img\\gradient.png", LPL_LOAD_FITTED);
  889. }
  890. if (obraz == 4)
  891. {
  892. Colour.LoadImage("img\\blurred.png", LPL_LOAD_FITTED);
  893. }
  894.  
  895.  
  896. Colour.ShowImage("Kolor");
  897.  
  898. rgbtogray(Colour, Grayscale);
  899.  
  900. Grayscale.ShowImage("Szary");
  901.  
  902. int rozmiar = 0;
  903. cerr << "Podaj rozmiar maski filtru medianowego :" << endl;
  904. cin >> rozmiar;
  905. while (rozmiar % 2 == 0)
  906. {
  907. cerr << "Rozmiar musi byc liczba nieparzysta! Podaj ponownie: " << endl;
  908. cin >> rozmiar;
  909. cerr << endl;
  910. }
  911.  
  912. filtrmedianowy(Grayscale, Median, rozmiar);
  913.  
  914. Median.ShowImage("Po_Medianowym");
  915.  
  916. binaryzacja(Median, Binary);
  917.  
  918. Binary.ShowImage("Binarny");
  919.  
  920. dylatacja(Binary, Binaryd1);
  921. erozja(Binaryd1, Binaryd1e1);
  922. erozja(Binaryd1e1, Binaryd1e2);
  923. dylatacja(Binaryd1e2, Binaryd2e2);
  924.  
  925. erozja(Binaryd2e2, Binaryd2e3);
  926. dylatacja(Binaryd2e3, Binaryd3e3);
  927. dylatacja(Binaryd3e3, Binaryd4e3);
  928. erozja(Binaryd4e3, BinaryMorfo);
  929.  
  930. BinaryMorfo.ShowImage("Binarny_Po_Morfo");
  931.  
  932.  
  933. int **Tsc = new int *[BinaryMorfo.width()];
  934.  
  935. for (int i = 0; i<BinaryMorfo.width(); i++)
  936. {
  937. Tsc[i] = new int[BinaryMorfo.height()];
  938. }
  939.  
  940.  
  941.  
  942. int **Tsb = new int *[BinaryMorfo.width()];
  943.  
  944. for (int i = 0; i<BinaryMorfo.width(); i++)
  945. {
  946. Tsb[i] = new int[BinaryMorfo.height()];
  947. }
  948.  
  949.  
  950. segmentacja(BinaryMorfo, Tsc, 0);
  951. segmentacja(BinaryMorfo, Tsb, 1);
  952.  
  953.  
  954. lista *glowabialy = new lista;
  955. lista *pombialy = glowabialy;
  956. glowabialy->next = 0;
  957. glowabialy->liczba = -1;
  958.  
  959. lista *glowa1bialy = new lista;
  960. lista *pom1bialy = glowa1bialy;
  961. lista *pom2bialy = glowa1bialy;
  962. glowa1bialy->next = 0;
  963. glowa1bialy->liczba = -1;
  964.  
  965. bool kolor = 1;
  966.  
  967. segregacja(BinaryMorfo, Tsb, pombialy, pom1bialy, kolor);
  968.  
  969.  
  970. lista *glowaczarny = new lista;
  971. lista *pomczarny = glowaczarny;
  972. glowaczarny->next = 0;
  973. glowaczarny->liczba = -1;
  974.  
  975. lista *glowa1czarny = new lista;
  976. lista *pom1czarny = glowa1czarny;
  977. lista *pom2czarny = glowa1czarny;
  978. glowa1czarny->next = 0;
  979. glowa1czarny->liczba = -1;
  980.  
  981. kolor = 0;
  982.  
  983. segregacja(BinaryMorfo, Tsc, pomczarny, pom1czarny, kolor);
  984.  
  985. int figura1 = 0;
  986. int figura2 = 0;
  987. int figura3 = 0;
  988. int figura4 = 0;
  989. int figura1kolor; // 1-pik 2-kier 3-karo
  990. int figura2kolor;
  991. int figura3kolor;
  992. int figura4kolor;
  993.  
  994. przynaleznosc(figura1, figura2, figura3, figura4, figura1kolor, figura2kolor, figura3kolor, figura4kolor, pom2czarny, pom2bialy, Tsc, Tsb, BinaryMorfo, Colour);
  995.  
  996. wypisz(figura1, figura2, figura3, figura4, figura1kolor, figura2kolor, figura3kolor, figura4kolor);
  997.  
  998. program(figura1, figura2, figura3, figura4);
  999.  
  1000.  
  1001.  
  1002. system("pause");
  1003.  
  1004. return 0;
  1005. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement