Advertisement
pongfactory

myCode_July2016[1]

Jul 26th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 17.13 KB | None | 0 0
  1. clear;
  2. clc;
  3. %nlist           = {'aerial6.jpg';'aerial10.jpg';'roadA.jpg';'aerial8.jpg'};
  4. nlist1 = {'all_used/1.png'};   % theshold = 23000
  5. nlist2 = {'all_used/2.png'}; % theshold =
  6. nlist3 = {'all_used/3.png'};   % theshold =
  7. nlist4 = {'all_used/4.png'};   % theshold = 7500
  8. nlist5 = {'all_used/5.png'};  % theshold = 29000
  9. nlist6 = {'all_used/6.png'};
  10. nlist7 = {'all_used/7.png'};
  11. nlist8 = {'all_used/8.png'};
  12. nlist9 = {'all_used/9.png'};
  13. nlist10 = {'all_used/10.png'};
  14.  
  15. nlistDeep = {'datasets/Test_set/Input/18328735_15.tiff'};
  16. nlistDeep2 = {'datasets/Test_set/Target/18328735_15.tif'};
  17.  
  18.  
  19. threshold_fix = 23000;
  20.  
  21. % test kmeans
  22. X = [randn(20,2)+ones(20,2); randn(20,2)-ones(20,2)];
  23.       opts = statset('Display','final');
  24.       [cidx, ctrs] = kmeans(X, 4, 'Distance','city', ...
  25.                             'Replicates',5, 'Options',opts);
  26.  
  27. for cta = 1:1 % all in my img folder is 7
  28.     nm = nlist10{cta};
  29.     rgb = imread(nm);
  30.     normImage = im2double(rgb);
  31.     nm_input = rgb2gray(normImage);
  32.    
  33.     target = imread(nlistDeep2{1});
  34.    % figure, imshow(target);
  35.    
  36. %     a=imread('test1.jpg');
  37. %     b=imresize(a,[500 800]);
  38.    
  39. % Step 1: Read Image
  40.     img_resize = imresize(rgb, 1);
  41.     he = img_resize;
  42.     he2 = img_resize;
  43.  %   figure, imshow(he), title('1'); % Showing a original image.
  44.    
  45.     img_graythresh = rgb2gray(he );
  46.     threshold = graythresh(img_graythresh);
  47.     bw_img = im2bw(he,threshold);
  48.  %   figure, imshow(bw_img), title('2');
  49.   %  figure, imhist(img_graythresh), title('3');
  50.  
  51. % Step 2: Convert Image from RGB Color Space to L*a*b* Color Space
  52.     cform = makecform('srgb2lab');
  53.     cform_rgb = makecform('lab2srgb');
  54.     lab_he = applycform(he,cform);
  55.     rgb_he = applycform(he,cform_rgb);
  56.    
  57. % Step 3: Classify the Colors in 'a*b*' Space Using K-Means Clustering
  58.     ab = double(rgb_he(:,:,2:3));
  59.     ab_all_band = double(rgb_he(:,:,2:3));
  60.     nrows = size(ab,1);
  61.     ncols = size(ab,2);
  62.     ab = reshape(ab,nrows*ncols,2);
  63.      
  64.     nColors = 3;
  65.     [cluster_idx, cluster_center] = kmeans(ab,nColors, ...
  66.                                     'Replicates',1, ...
  67.                                     'Options',opts, ...
  68.                                     'start',[118 143; 127 140; 133 127]);
  69.                                 % 'start',[118 143; 127 140; 133 127]);
  70.                          
  71. % Step 4: Label Every Pixel in the Image Using the Results from KMEANS
  72.     pixel_labels = reshape(cluster_idx,nrows,ncols);
  73.     %figure(2), imshow(pixel_labels,[]), title('image labeled by cluster index')
  74.    
  75. % Step 5: Create Images that Segment the H&E Image by Color.
  76.     segmented_images = cell(1,3);
  77.     rgb_label = repmat(pixel_labels,[1 1 3]);
  78.  
  79.     for k = 1:3
  80.          color = rgb;
  81.          color(rgb_label ~= k) = 0;
  82.          segmented_images{k} = color;
  83.     end
  84.  
  85.     %figure, imshow(segmented_images{1}), title('objects in cluster 1')
  86.     %figure, imshow(segmented_images{2}), title('objects in cluster 2')
  87.     figure, imshow(segmented_images{3}), title('objects in cluster 3')
  88.    
  89.     %Normaliztion for clustering road area.    
  90.     normImage_c3 = mat2gray(segmented_images{3});
  91.     normImage_c3_gray =rgb2gray(segmented_images{3});
  92.     %figure, imhist(normImage_c3_gray);
  93.  
  94.     % to Binary image
  95.     gray_convert_image = rgb2gray(normImage_c3);
  96.     binary_convert_image = im2bw(gray_convert_image);
  97.     figure, imshow(binary_convert_image)
  98.     bwarea(binary_convert_image);
  99.    
  100.     %bw = imread('text.tif');
  101.     %se = strel('line',20,150);
  102.     se = strel('line',10,10);
  103.     bw2 = imdilate(binary_convert_image,se);% graythresh = 'bw_img' % kmeans = 'binary_convert_image'
  104.     %imshow(bw), title('Original')
  105.     figure, imshow(bw2), title('Dilated')
  106.     bw3 = ~bw2;
  107.     bw4 = im2bw(bw3);
  108.     %figure, imshow(bw4);
  109.     CC = bwconncomp(bw2); %Connected Component Finding all area.
  110.     %CC = bwconncomp(my_image);
  111.     L = labelmatrix(CC);
  112.     A = cell( size(CC.PixelIdxList,1) , size(CC.PixelIdxList,2) );
  113.     A = CC.PixelIdxList;
  114.     size(CC.PixelIdxList,2);
  115.  
  116.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
  117.    
  118.  
  119.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  120.  
  121.     La=bwlabel(bw2,8); %%% labeledImage is a binary image
  122.     figure,imshow(La,[]);
  123.     coloredLabel = label2rgb(La, 'hsv', 'k', 'shuffle');
  124.     imshow(coloredLabel);
  125.    
  126.   %  pr = regionprops( La, 'Area', 'PixelIdxList' );
  127.    
  128.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
  129.    
  130.     stats = regionprops(bw2,'Area')
  131.     stats2 = regionprops(bw2,'Centroid')
  132.  
  133.  
  134.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  135.     smallAreaA = La;
  136.     smallAreaSh = La;
  137.     smallArea = La;
  138.     smallArea2 = La;
  139.     smallArea3 = La;
  140.     smallArea4 = La;
  141.     smallArea5 = La;
  142.     s = regionprops(La, 'Orientation','Area','PixelIdxList','Perimeter', 'BoundingBox',...
  143.         'MajorAxisLength', 'MinorAxisLength', 'Eccentricity', 'Centroid');
  144.  
  145.     %%%%%%%%%%%%%%%%%%%%%%%  regionprop to matrix %%%%%%%%%%%%%%%%%%%%%%%%%
  146. %     numel(s.Area)
  147. %     for i=1:numel(s)
  148. %         s(i).Centroid(1)
  149. %         s(i).Centroid(2)
  150. %     end
  151.     num_boject = 1:1:size(s);
  152.     s_centroid = vertcat(s.Centroid);
  153.     cen1 = s_centroid(:,1);
  154.     cen2 = s_centroid(:,2);
  155.     region_matrix = [s.Area; s.Perimeter; num_boject;]';
  156.    
  157.     s_area = region_matrix(:,1);
  158.     s_perimeter = region_matrix(:,2);
  159.     s_num = region_matrix(:,3);
  160.     min_perimeter = (sqrt(region_matrix(:,1)))*4;
  161.     shape_index = s_perimeter./min_perimeter;
  162.    % region_matrix_used = [s_num s_area s_perimeter min_perimeter shape_index s_centroid(:,1) s_centroid(:,2)];
  163.     region_matrix_used = [s_num s_area s_perimeter min_perimeter shape_index];
  164.     threshold_use = max(s_area)/2;
  165.    
  166.     %    x(x(:,1)>2 & x(:,1)<6 , :)
  167.     %%AA = region_matrix_used(region_matrix_used(:,5)>2.25);
  168.    
  169.     %s_area > threshold_use & shape_index > 2.25;
  170.     score = shape_index;
  171.     score2 = s_area;
  172.     num2 = 0;
  173.     area2 = 0;
  174.     shape2 = 0;
  175.     cent1 = 0;
  176.     cent2 = 0;
  177.     j = 1;
  178.     k = 1;
  179.    
  180.     for i=1:size(s)
  181.         if s_area(i) > threshold_use & shape_index(i) > 2.25;
  182.            q1 = s_num(i);
  183.            q2 = s_area(i);
  184.            q3 = shape_index(i);
  185.            q4 = cen1(i);
  186.            q5 = cen2(i);
  187.            num(j) = q1;
  188.            area(j) = q2;
  189.            shape(j) = q3;
  190.            centA(j) = q4;
  191.            centB(j) = q5;
  192.           % figure, imshow(bw4);
  193.           % text(s(i).Centroid(1),s(i).Centroid(2),num2str(score(i)),'FontSize',15,'color','red');
  194.            j = j+1;
  195.            %region_state1 = [num' area' shape'];
  196. %        else
  197. %            q1 = s_num(i);
  198. %            q2 = 0;
  199. %            q3 = 0;
  200. %            q4 = 0;
  201. %            q5 = 0;
  202. %            num(j) = q1;
  203. %            area(j) = q2;
  204. %            shape(j) = q3;
  205. %            centA(j) = q4;
  206. %            centB(j) = q5;
  207. %           % figure, imshow(bw4);
  208. %           % text(s(i).Centroid(1),s(i).Centroid(2),num2str(score(i)),'FontSize',15,'color','red');
  209. %            j = j+1;
  210.         end
  211.     end
  212.    
  213.    
  214.     for i=1:size(s)
  215.         %if shape_index(i) > 2.25;
  216.         if s_area(i) < threshold_use & shape_index(i) > 2.25;
  217.            q1 = s_num(i);
  218.            q2 = s_area(i);
  219.            q3 = shape_index(i);
  220.            q4 = cen1(i);
  221.            q5 = cen2(i);
  222.            num2(k) = q1;
  223.            area2(k) = q2;
  224.            shape2(k) = q3;
  225.            cent1(k) = q4;
  226.            cent2(k) = q5;
  227. %            figure, imshow(bw4);
  228. %            text(s(i).Centroid(1),s(i).Centroid(2),num2str(score(i)),'FontSize',15,'color','red');
  229.            k = k+1;
  230. %         else
  231. %            q1 = s_num(i);
  232. %            q2 = 0;
  233. %            q3 = 0;
  234. %            q4 = 0;
  235. %            q5 = 0;
  236. %            num2(k) = q1;
  237. %            area2(k) = q2;
  238. %            shape2(k) = q3;
  239. %            cent1(k) = q4;
  240. %            cent2(k) = q5;
  241. % %            figure, imshow(bw4);
  242. % %            text(s(i).Centroid(1),s(i).Centroid(2),num2str(score(i)),'FontSize',15,'color','red');
  243. %            k = k+1;
  244.         end
  245.     end
  246.     region_state1 = [num' area' shape' centA' centB'];
  247.     region_state2 = [num2' area2' shape2' cent1' cent2'];
  248.  
  249.     % x = [0,0;1,1];
  250.     % d = pdist(x,'euclidean');
  251.      temp1 = 1;
  252.      all_object = max(size(region_state2(region_state2(:,3)>0)));
  253.    %  for i=1:2
  254.          area = region_state1(:,2);
  255.          cen_road1 = region_state1(:,4);
  256.          cen_road2 = region_state1(:,5);
  257.          cen_check1 = region_state2(:,4);
  258.          cen_check2 = region_state2(:,5);
  259.          
  260.        for i=1:3  %% i = number of checking for local road.
  261.          dis11 = [cen_road1(1),cen_road2(1);cen_check1(i),cen_check2(i)];
  262.          dis12 = [cen_road1(2),cen_road2(2);cen_check1(i),cen_check2(i)];
  263.          d11 = pdist(dis11,'euclidean');
  264.          d12 = pdist(dis12,'euclidean');
  265.          
  266.          similarity(i) =  ((area(1)/(d11^2))+(area(2)/(d12^2)))/2
  267.          
  268.        end  
  269.  
  270.   %   end
  271.      
  272.    % similarity = similarity;
  273.     region_state3 = [num2' area2' shape2' similarity'];
  274.    
  275.     iso_num = region_state3(:,1);
  276.     iso_iso = region_state3(:,4);
  277.     indexIso=1;
  278.     for i=1:size(s_num)
  279.        Test(i) = 0;
  280.        
  281.        for j=1:3  % take isolation following numners of it.
  282.            if i == iso_num(j)
  283.                Test(i) = iso_iso(j);
  284.            end
  285.        end
  286.        
  287.        
  288.     end
  289.    
  290.     region_state4 = [s_num Test'];
  291.     isolate = region_state4(:,2);
  292.    
  293. %     used_column = region_matrix_used(:,1);
  294. %     test_column = region_state3(:,1);
  295. %     isolate = region_state3(:,7);
  296.  
  297. %     for i=1:size(region_matrix_used)
  298. %         if used_column == test_column
  299. %              region_matrix_used = [region_matrix_used region_state3(:,7)];
  300. %         end
  301. %     end
  302.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  303.    
  304.     %%%%%%%%%%%%%%%%%%%%%%%%%% Show value on objects %%%%%%%%%%%%%%%%%%%%%%
  305.     % score = (min(sqrt([s.Area]),[s.Perimeter]/4)./(max(sqrt([s.Area]),[s.Perimeter]/4))).^2;    
  306.     % score = shape_index;
  307. %     figure, imshow(bw4);
  308. %     for cnt = 1:length(s)
  309. %         text(s(cnt).Centroid(1),s(cnt).Centroid(2),num2str(score(cnt)),'FontSize',15,'color','red');
  310. %     end
  311.     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  312. threshold_max2 = max(region_matrix_used(:,2))
  313. threshold_max = max(region_matrix_used(:,2))/2
  314. %shape_index = 2.5;
  315.  
  316. %small_selectSh = ((shape_index > 2.25));
  317. %smallAreaSh( vertcat( s(~small_selectSh).PixelIdxList ) ) = 0; %// set all other regions to zero
  318.  
  319. %small_selectA = ((s_area >= threshold_max));
  320. %smallAreaA( vertcat( s(~small_selectA).PixelIdxList ) ) = 0; %// set all other regions to zero
  321.  
  322. small_select = ((s_area >= threshold_max) & (shape_index > 2.25));
  323. smallArea( vertcat( s(~small_select).PixelIdxList ) ) = 0; %// set all other regions to zero
  324.  
  325. MainRoad = (s_area >= threshold_max) & (shape_index > 2.25);
  326. %small_select2 = ((s_area < threshold_max) & (shape_index > 2.49));
  327. %smallArea2( vertcat( s(~small_select2).PixelIdxList ) ) = 0; %// set all other regions to zero
  328.  
  329. small_select3 = ((shape_index > 2.25)); %all
  330. smallArea3( vertcat( s(~small_select3).PixelIdxList ) ) = 0; %// set all other regions to zero
  331.  
  332. small_select4 = (isolate > 0.4);
  333. smallArea4( vertcat( s(~small_select4).PixelIdxList ) ) = 0; %// set all other regions to zero
  334. LocalRoad = (isolate > 0.4);
  335.  
  336. small_select5 = (MainRoad + LocalRoad);
  337. smallArea5( vertcat( s(~small_select5).PixelIdxList ) ) = 0; %// set all other regions to zero
  338.  
  339. %figure, imshow( smallAreaSh ); colormap( summer );
  340. %figure, imshow( smallAreaA ); colormap( summer );
  341. figure, imshow( smallArea ); colormap( summer );
  342. %figure, imshow( smallArea2 ); colormap( summer );
  343. %figure, imshow( smallArea3 ); colormap( summer );
  344. figure, imshow( smallArea3 ); %all
  345. figure, imshow( smallArea4 ); colormap( summer );
  346. figure, imshow( smallArea5 );
  347. %figure, imshow( ~smallArea4 );
  348.  
  349. %     if (s_area >= threshold_max) & (shape_index > 2.5)
  350. %         smallArea( vertcat( s(~small_select).PixelIdxList ) ) = 0;
  351. %         coloredLabelA = label2rgb(smallArea, 'hsv', 'g');    
  352. %     elseif (s_area < threshold_max) & (shape_index > 2.5)
  353. %         smallArea( vertcat( s(~small_select).PixelIdxList ) ) = 0;
  354. %         coloredLabelA = label2rgb(smallArea, 'hsv', 'b');
  355. %     end
  356. % figure, imshow( coloredLabelA );
  357.  
  358.    
  359. figure, imshow(nm), hold on, himage = imshow(smallArea5), set(himage, 'AlphaData', 0.6);
  360.  
  361.  
  362. % Comment %%%
  363. %    
  364. %     % Thining the image
  365. %     skeletionization_image = bwmorph(smallArea3,'thin',Inf);
  366. %     se2 = strel('line',2,2); % 'line',5,8  'best',2,2
  367. %     bw2 = imdilate(skeletionization_image,se2);
  368. %     coloredLabel1 = label2rgb(bw2, 'hsv', 'k', 'shuffle');
  369. %     % figure, imshow(coloredLabel1);
  370. %     % ps     = dpsimplify(skeletionization_image,1);
  371. %    
  372. %     % SHOW ---------------- Thining the image ---------------------
  373. %    
  374. % %     figure, imshow( smallArea ); colormap( summer ), hold on
  375. % %     himage = imshow(coloredLabel1);
  376. % %     set(himage, 'AlphaData', 0.7);
  377. % %    
  378. % %     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
  379. % %    
  380. % %
  381. % %     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  382. % %    
  383. % %     % Skeleton the image
  384. % %     skeletionization_image = bwmorph(smallArea,'skel',Inf);
  385. % %     se2 = strel('line',2,2); % 'line',5,8  'best',2,2
  386. % %     bw2 = imdilate(skeletionization_image,se2);
  387. % %     coloredLabel2 = label2rgb(bw2, 'hsv', 'k', 'shuffle');
  388. % %     % figure, imshow(coloredLabel1);
  389. % %     % ps     = dpsimplify(skeletionization_image,1);
  390. % %
  391. % %     % SHOW ---------------- Skeleton the image ---------------------
  392. % %     figure, imshow(nm), hold on
  393. % %     himage = imshow(coloredLabel2);
  394. % %     set(himage, 'AlphaData', 0.7);
  395. % %    
  396. %     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%    
  397. %    
  398. %
  399. %     %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  400. %    
  401. % %  - - - - - - - - - - - - - Find brach I - - - - - - - - - - - - - - - -
  402. %     skelImg   = bwmorph(smallArea3, 'thin', 'inf');
  403. %     branchImg = bwmorph(skelImg, 'branchpoints');
  404. %     endImg    = bwmorph(skelImg, 'endpoints');
  405. %
  406. %     [row, column] = find(endImg);
  407. %     endPts        = [row column];
  408. %     [row, column] = find(branchImg);
  409. %     branchPts     = [row column];
  410. %    
  411. %     figure; imshow(skelImg); hold on;
  412. %     plot(branchPts(:,2),branchPts(:,1),'r*'); hold on;
  413. %     plot(endPts(:,2),endPts(:,1),'*');
  414. %    
  415. %   % - - - - - - - - - - - - Find branch II - deleting some node - - - - - -
  416. %     skel2= bwmorph(smallArea3,'skel',Inf);
  417. %
  418. %     B = bwmorph(skel2, 'branchpoints');
  419. %     E = bwmorph(skel2, 'endpoints');
  420. %
  421. %     [y,x] = find(E);
  422. %     B_loc = find(B);
  423. %    
  424. %    
  425. %     Dmask = false(size(skel2));
  426. %     for k = 1:numel(x)
  427. %         D = bwdistgeodesic(skel2,x(k),y(k));
  428. %         distanceToBranchPt = min(D(B_loc));
  429. %         Dmask(D < distanceToBranchPt) =true;
  430. %     end
  431. %     skelD = skel2 - Dmask;
  432. %     coloredLabel2 = label2rgb(skelD, 'hsv', 'k', 'shuffle');
  433. %     figure, imshow(skelD);
  434. %     hold all;
  435. %     [y,x] = find(B); plot(x,y,'ro')
  436. %    
  437. %    % figure, imshow(nm), hold on
  438. %     figure, imshow( smallArea3 ); colormap( summer ), hold on % my output
  439. %     himage = imshow(coloredLabel2);
  440. %     set(himage, 'AlphaData', 0.7);
  441. %    
  442. %    
  443. % %     figure, imshow( smallArea ), hold on % my output
  444. % %     himage = imshow(coloredLabel2);
  445. % %     set(himage, 'AlphaData', 0.7);
  446. %     % - - - - - - - - - - - - Find HOUGH lines - - - - - - - - - - - - - -
  447. % %    % rotI = imrotate(smallArea,1,'crop');
  448. % %     BW = edge(smallArea,'canny');
  449. % %     [H,T,R] = hough(BW);
  450. % %     figure, imshow(~BW);
  451. % % %     figure, imshow(H,[],'XData',T,'YData',R,...
  452. % % %                 'InitialMagnification','fit');
  453. % %     xlabel('\theta'), ylabel('\rho');
  454. % %     axis on, axis normal, hold on;
  455. % %     P  = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
  456. % %     x = T(P(:,2)); y = R(P(:,1));
  457. % %     plot(x,y,'s','color','white');
  458. % %     % Find lines and plot them
  459. % %     lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
  460. % %     figure, imshow(smallArea), hold on
  461. % %     max_len = 0;
  462. % %     for k = 1:length(lines)
  463. % %        xy = [lines(k).point1; lines(k).point2];
  464. % %        plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
  465. % %
  466. % %        % Plot beginnings and ends of lines
  467. % %        plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
  468. % %        plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
  469. % %
  470. % %        % Determine the endpoints of the longest line segment
  471. % %        len = norm(lines(k).point1 - lines(k).point2);
  472. % %        if ( len > max_len)
  473. % %           max_len = len;
  474. % %           xy_long = xy;
  475. % %        end
  476. % %     end
  477. % %
  478. % %     %  - - - - - - - -  Simplipfy with DP  - - - - - - - - - - - - - - - -
  479. % % %     B2 = num2cell(B);
  480. % % %     tol    = 0.5;
  481. % % %     ps     = dpsimplify(B2,tol);
  482. % % %     hold on
  483. % % %     figure, plot(ps(:,1),ps(:,2),'r','LineWidth',2);
  484. % % %     legend('original polyline','simplified')
  485. %
  486. %
  487. %
  488. %
  489. %
  490. % % Comment %%
  491.  end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement