Advertisement
Guest User

Untitled

a guest
Jun 18th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.55 KB | None | 0 0
  1. %% Zadanie przykładowe 1.
  2. clear all; close all; clc;
  3. im = imread('tire.tif');
  4. [S L] = wavedec2(im, 2, 'bior3.3');
  5. S1 = S;
  6. L1 = L(:,1).*L(:,2);
  7. % A2 H2 V2 D2 H1 V1 D1
  8. % L1(1) 3xL1(2) 2xL1(3)
  9.  
  10. S1(1 + L1(1) + 2*L1(2) : L1(1) + 3*L1(2)) = 0;
  11. S1(1 + L1(1) + 3*L1(2) + 2*L1(3) : L1(1) + 3*L1(2) + 3*L1(3)) = 0;
  12.  
  13. im_rec = waverec2(S1, L, 'bior3.3');
  14. subplot(211); imshow(im); title('Przed');
  15. subplot(212); imshow(im_rec); title('Po');
  16.  
  17. %% Zadanie przykładowe 2 & zad2 z https://drive.google.com/drive/u/1/folders/0B7iKO8QPDijJd090bkZzczB4SVE
  18. clear all; close all; clc;
  19. im = phantom(256);
  20. im2 = zeros(210, 210);
  21.  
  22. [t, r] = size(im2);
  23.  
  24. for k = 1:21
  25. x = ((k*10)-10)+1;
  26. y = 1;
  27.  
  28. im2(y : 210, x : x + 9) = k / 21;
  29. end
  30.  
  31. krok = [1 2 3 5 8 10 12, 15];
  32. N = length(krok);
  33.  
  34. blad = zeros(N, 1);
  35. for k = 1:N
  36. kat = 0:krok(k):180;
  37. [R, xp] = radon(im2, kat);
  38. im_new = iradon(R, kat);
  39.  
  40. for kz = 1:t
  41. for kx = 1:r
  42. blad(k) = blad(k) + (im(kz, kx) - im_new(kz, kx)).^2;
  43. end
  44. end
  45. blad(k) = sqrt(blad(k));
  46. end
  47.  
  48. plot(krok, blad, 'r'); xlabel('Krok'); ylabel('Błąd');
  49.  
  50. %% Zadanie przykładowe 3
  51. clear all; close all; clc;
  52. im = imread('shape2.bmp');
  53. im2 = im(:,:,1) < 255 & im(:,:,2) < 255 & im(:,:,3) < 255;
  54.  
  55. aseg = bwlabel(im2);
  56. obw = (aseg == 5) | (aseg == 337) | (aseg == 17);
  57. obw = imfill(obw, 'holes');
  58. im3 = im2 | obw;
  59.  
  60. im3 = imclose(im3, [1 1; 1 1]);
  61. aseg = bwlabel(im3);
  62. N = max(max(aseg));
  63. props = regionprops(im3, 'all');
  64.  
  65. ob_z_dziura = zeros(size(im3));
  66. prostokat = zeros(size(im3));
  67. gwiazdka = zeros(size(im3));
  68.  
  69. for k = 1:N
  70. if props(k).EulerNumber == 0
  71. ob_z_dziura = ob_z_dziura | aseg == k;
  72. end
  73.  
  74. pole = bwarea(aseg == k);
  75.  
  76. if abs((props(k).BoundingBox(3) * props(k).BoundingBox(4)) / pole - 1) < 0.01
  77. if abs(props(k).BoundingBox(3) - props(k).BoundingBox(4)) > 1
  78. prostokat = prostokat | aseg == k;
  79. end
  80. end
  81.  
  82. UpEx = props(k).Extrema(1) - props(k).Extrema(2);
  83. LeftEx = props(k).Extrema(15) - props(k).Extrema(16);
  84.  
  85. if abs(UpEx) <= 1 && abs(LeftEx) <= 3
  86. gwiazdka = gwiazdka | aseg == k;
  87. end
  88. end
  89.  
  90. im3 = 255 * uint8(im3);
  91. im3 = cat(3, im3, im3, im3);
  92.  
  93. prostokat = 255 * uint8(prostokat);
  94. gwiazdka = 255 * uint8(gwiazdka);
  95. ob_z_dziura = 255 * uint8(ob_z_dziura);
  96.  
  97. [z, x, dim] = size(im3);
  98.  
  99. for kz = 1:z
  100. for kx = 1:x
  101. if im3(kz, kx, 1) == 255;
  102. im3(kz, kx, 1) = 0; im3(kz, kx, 2) = 0; im3(kz, kx, 3) = 255;
  103. end
  104.  
  105. if im3(kz, kx, 3) == 0;
  106. im3(kz, kx, 1) = 255; im3(kz, kx, 2) = 255; im3(kz, kx, 3) = 255;
  107. end
  108.  
  109. if ob_z_dziura(kz, kx, 1) == 255;
  110. im3(kz, kx, 1) = 0; im3(kz, kx, 2) = 255; im3(kz, kx, 3) = 0;
  111. end
  112.  
  113. if prostokat(kz, kx, 1) == 255;
  114. im3(kz, kx, 1) = 255; im3(kz, kx, 2) = 0; im3(kz, kx, 3) = 0;
  115. end
  116.  
  117. if gwiazdka(kz, kx, 1) == 255;
  118. im3(kz, kx, 1) = 255; im3(kz, kx, 2) = 255; im3(kz, kx, 3) = 0;
  119. end
  120. end
  121. end
  122.  
  123. subplot(121); imshow(im);
  124. subplot(122); imshow(im3);
  125.  
  126. %% Zadanie przykładowe 4
  127. clear all; close all; clc;
  128. vid = zeros(256, 256, 3, 20, 'uint8');
  129. % Środek koła głównego to 128, 128, r = 50
  130. % Małego koła środek to godz 12. -> 178,128
  131. % Małego koła środek końcowy to godz 3. -> 128, 178
  132. % Kąt 270
  133. krok = 255/19;
  134. vid(178, 128, 3, 1) = 1;
  135. for k = 1:20
  136. kat = -(90 + (k - 1) * 270/19);
  137. x = round(128 + 50*cosd(kat)); % Środek + promień(kąt), gdzie kąt określa, gdzie w odległości 50px od środka zaczynamy. 0 stopni jest na dodatniej półosi x.
  138. z = round(128 + 50*sind(kat));
  139. vid(z, x, 2, k) = (255 - (k - 1) * krok);
  140. vid(z, x, 1, k) = (0 + (k - 1) * krok);
  141. vid(:, :, 1:2, k) = imdilate(vid(:, :, 1:2, k), strel('disk', 5 + 2 * (k-1)));
  142. end
  143.  
  144. implay(vid);
  145.  
  146. %% Zadanie przykładowe 5
  147. clear all; close all; clc;
  148. im = imread('rice.png');
  149. im2 = imresize(im, [256 * 1.5, 256]); % Ta funkcja używa bikubicznej defaultowo.
  150. im3 = imclose(im2, [1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1]);
  151. im4 = imadjust(im3, [0 1], [0.15 0.9]); % Nie wiem, czy to dobrze.
  152.  
  153. [col, row] = size(im4);
  154. biale = 0;
  155. czarne = 0;
  156.  
  157. im5 = im4 > 128; % Automatycznie zbinaryzuj?
  158. for kz = 1:col
  159. for kx = 1:row
  160. if im5(kz, kx) == 0
  161. czarne = czarne + 1;
  162. else
  163. biale = biale + 1;
  164. end
  165. end
  166. end
  167.  
  168. ratio = biale/czarne; % Pikseli białych jest 2x mniej niż czarnych, ale nie wiem, czy o to chodziło. Raczej niezbyt.
  169.  
  170. subplot(221); imshow(im);
  171. subplot(222); imshow(im2);
  172. subplot(223); imshow(im3);
  173. subplot(224); imshow(im4);
  174. imshow(im3);
  175. %% Zadanie przykładowe 6
  176. clear all; close all; clc;
  177. im = imread('peppers.png');
  178. im = double(im)/255;
  179.  
  180. maska = [3 5];
  181. red = im(:,:,1);
  182. green = im(:,:,2);
  183. blue = im(:,:,3);
  184.  
  185. redf = medfilt2(red, maska);
  186. greenf = medfilt2(green, maska);
  187. bluef = medfilt2(blue, maska);
  188.  
  189. [col, row, dim] = size(im);
  190. skladowe = zeros(col, 2);
  191. % 1PKT: 1,1
  192. % OstPKT: 384 512
  193. % PolPKT: 192 256
  194. bin = false(col, row);
  195.  
  196. for kz = 1:col
  197. for kx = 1:row
  198. if (kz > kx)
  199. skladowe(kz, 1) = im(kz, kx, 3);
  200. skladowe(kz, 2) = im(kz, kx, 2);
  201. end
  202.  
  203. if ((im(kz, kx, 3) > im(kz, kx, 1 )) || (im(kz, kx, 3) > im(kz, kx, 1)))
  204. bin(kz, kx) = 1;
  205. end
  206. end
  207. end
  208.  
  209. er = imerode(bin, strel('disk', 5));
  210.  
  211. % Momenty bezwładności:
  212. % I MOMENT
  213. aseg = bwlabel(er);
  214. N = max(max(aseg));
  215.  
  216. pole_pow = 0; % Nie mam pojęcia, czy to ma być dla wszystkich figur czy całego obrazka.
  217.  
  218. for k = 1:N
  219. pole_pow = pole_pow + bwarea(aseg == k);
  220. end
  221.  
  222. x = 0;
  223. y = 0;
  224. for kz = 1:col
  225. for kx = 1:row
  226. if er(kz, kx) == 1
  227. x = x + kx;
  228. y = y + kz;
  229. end
  230. end
  231. end
  232.  
  233. M1x = (1/pole_pow)*x;
  234. M1y = (1/pole_pow)*y;
  235.  
  236. % II MOMENT
  237. x = 0;
  238. y = 0;
  239. for kz = 1:col
  240. for kx = 1:row
  241. if er(kz, kx) == 1
  242. x = x + (kx - M1x)^2;
  243. y = y + (kz - M1y)^2;
  244. end
  245. end
  246. end
  247.  
  248. M2x = 1/pole_pow*x;
  249. M2y = 1/pole_pow*y;
  250.  
  251. %% Zadanie przykładowe 7
  252. clear all; close all; clc;
  253. im = imread('pout.tif');
  254. im = double(im)/255;
  255. im = imadjust(im);
  256.  
  257. IM = fftshift(fft2(im));
  258.  
  259. [col, row] = size(im);
  260. maska = zeros(size(im));
  261. maska(290/2, 240/2) = 1;
  262. maska = bwdist(maska, 'euclidean');
  263.  
  264. LP = 1.0 ./ (1 + (maska / 20).^10);
  265. IM2 = IM .* LP;
  266. im_new = ifft2(ifftshift(IM2));
  267.  
  268. imshow(im_new);
  269.  
  270. bin = false(col, row);
  271. licznik = 0;
  272. for kz = 1:col
  273. for kx = 1:row
  274. if im_new(kz, kx) >= 0.2 && im_new(kz, kx) <= 0.25
  275. licznik = licznik + 1;
  276. bin(kz, kx) = 1;
  277. end
  278. end
  279. end
  280.  
  281. aseg = bwlabel(bin);
  282. N = max(max(aseg(:)));
  283.  
  284. %%
  285. clear all; close all; clc;
  286. im = imread('new-shape.bmp');
  287.  
  288. bin = (im > 50);
  289. aseg = bwlabel(bin);
  290. N = max(aseg(:));
  291. props = regionprops(bin, 'all');
  292.  
  293. x = zeros(1, N);
  294. y = zeros(1, N);
  295.  
  296. for k = 1:N
  297. fig = (aseg == k);
  298. pole = bwarea(fig);
  299. obwod = bwarea(bwperim(fig));
  300. bwk = (4*pi*pole)/(obwod*obwod);
  301. if abs(bwk - 1) < 0.05
  302. x(k) = props(k).BoundingBox(1) - 0.5;
  303. y(k) = props(k).BoundingBox(2) - 0.5;
  304. end
  305. end
  306.  
  307. bin2 = ~bin;
  308. aseg2 = bwlabel(bin2);
  309. N2 = max(aseg2(:));
  310. dziura_kolo = false(size(bin2));
  311.  
  312. for k = 1:N2
  313. fig = aseg2 == k;
  314.  
  315. for kx = 1:7
  316. r = x(1, kx);
  317. c = y(1, kx);
  318.  
  319. if c == 0 && r == 0
  320. continue;
  321. end
  322.  
  323. if fig(c, r) == 1
  324. dziura_kolo = dziura_kolo | fig;
  325. end
  326. end
  327. end
  328.  
  329. props2 = regionprops(bin2, 'all');
  330. szesciokaty = zeros(size(bin2));
  331.  
  332. for k = 1:N2
  333. fig = aseg2 == k;
  334.  
  335. temp = props2(k).Extrema(1) - props2(k).Extrema(2);
  336. if (abs(temp) <= 1)
  337. temp2 = props2(k).Extrema(5) - props2(k).Extrema(6);
  338. if (abs(temp2) <= 3)
  339. temp3 = props2(k).Extrema(11) - props2(k).Extrema(12);
  340. if (abs(temp3) > 90)
  341. szesciokaty = szesciokaty | fig;
  342. end
  343. end
  344. end
  345. end
  346.  
  347. subplot(211); imshow(szesciokaty);
  348. subplot(212); imshow(dziura_kolo);
  349.  
  350. %% 4 1b.jpg
  351. clear all; close all; clc;
  352. im = imread('pout.tif');
  353. im = imadjust(im);
  354. im = double(im)/255;
  355.  
  356. im_n = imnoise(im, 'salt & pepper', 0.02);
  357. im_n = imnoise(im_n, 'gaussian', 0.0, 0.001);
  358.  
  359. K = 2;
  360. M = 3;
  361.  
  362. im_new = wiener2(im_n, [K, M]);
  363. im_new = medfilt2(im_new, [K, M], 'symmetric');
  364.  
  365. imshow(im_new);
  366.  
  367. % Obliczanie błędu:
  368. oc = sqrt(sum(im(:) - im_new(:)).^2);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement