• API
• FAQ
• Tools
• Archive
SHARE
TWEET Untitled a guest Mar 23rd, 2019 55 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
1. clearvars,
2. close all,
3. clc,
5.
6.
7. source = '01058v.jpg';
8. %source = '00876a.tif';
9. %resultImg = GetColourPicture(source,'C');
10. imshow(source);
11.
12. select = 0;
13.
14. aux = split(source,'.');
15. [imgName, imgFormat] = deal(aux{1}, aux{2});
17.
18. if select == 0
19.     %Cut the image
20.     imgCropped = ImproveImg(img);
21.     modifImg = cat(3, edge(imgCropped(:,:,1),'canny',0.1),...
22.         edge(imgCropped(:,:,2),'canny',0.1), edge(imgCropped(:,:,3),'canny',0.1));
23.     resultImg = CreateWithFProd(imgCropped, 1, modifImg);
24.
25.
26. [b, g, r] = myGrayWorld(resultImg);
27. correctedImg = cat(3, b*resultImg(:,:,1), g*resultImg(:,:,2), r*resultImg(:,:,3));
28. imshowpair(resultImg, correctedImg, 'montage');
29. imwrite(im2uint8(correctedImg) ,strcat(imgName,'_method_',select,'_color.jpg'),'jpg');
30. resultImg = correctedImg;
31. end
32.
33.
34. function [factorB, factorG, factorR] = myGrayWorld(img)
35.     means = [mean2(img(:,:,1)), mean2(img(:,:,2)), mean2(img(:,:,3))];
36.     suma = sum(means);
37.     factors = suma./means; %valid factors (every mul by scalar will be valid too
38.     %---------FACTORS THAT PRODUCES EVERY MEAN UNDER 255------------
39.     [~, max_index] = max(means);
40.     factorsMean = factors./factors(max_index); %valid factors with each mean under 255
41.     %-----FACTORS THAT PRODUCES EVERY PIXEL VALUE UNDER 255---------
42.     [~, min_index] = min(means);
43.     factorsPx = factors./factors(min_index); %valid factors with each px under 255
44.     %-----------------GET OUTPUT OF THE SECONDS----------------------
45.     factorB = factorsPx(1); factorG = factorsPx(2); factorR = factorsPx(3);
46. end
47.
48.
49. function [ resultImg ] = CreateWithFProd( imgOrig, baseChannel, imgModif )
50. %ImgOrig: Original Image, than will be used for the output
51. %baseChannel: The channel that will not be moved. The static channel
52. %imgModif: A modification of the img (with te same dimension that imgOrig),
53. %that will be used to have the calculs (For example a convolutionedImg).
54. %-------------------------- TAKING VARIABLES ---------------------------
55. %emule a default parameter baseChannel = 1
56. if nargin<3 || baseChannel>3
57.     baseChannel = 1; %Base channel declared in RGB! not BGR
58. end
59. if nargin<3
60.     imgModif = imgOrig;
61. end
62. tic%====================================================================
63. %This constant will be used in the formula of Fourier to Convolution
64. sqrtOf2pi = sqrt(2*pi);
65. %The fourier fast transform of the base channel.
66. fourierOfBase = fft2(double(imgModif(:,:,baseChannel)));
67.
68. %------------------------- ADJUST THE IMAGES ---------------------------
69. for dim = 1:size(imgOrig,3)
70.     if dim ~= baseChannel
71.         %flips the img to compensate the intrinsic flip of the convolution
72.         imageFlip = flip(flip(double(imgModif(:,:,dim))), 2);
73.         %makes the fourier trasform of it
74.         fourierOfChannel = fft2(imageFlip);
75.         %The inverse fourier transform of the point point product of two images,
76.         %multiplied by the sqrt of 2pi, is equals to the convolution of two
77.         %images.
78.         ppProd = fourierOfBase.*fourierOfChannel;
79.         cnv = sqrtOf2pi*ifft2(ppProd);
80.         %In the same image the max value of convolution will be in center
81.         %else, this max value will aproximates the shift between 2 images
82.         [row, col] = find(cnv==max(max(cnv)));
83.         %move vertical
84.         imgOrig(:,:,dim) = circshift(imgOrig(:,:,dim), row, 1);
85.         %move horitzontal
86.         imgOrig(:,:,dim) = circshift(imgOrig(:,:,dim), col, 2);
87.
88.         disp(sprintf('Image was shifted [%d, %d] on channel %d (Base size = %d x %d)'...
89.             ,row, col, dim, size(imgOrig(:,:,1),1), size(imgOrig(:,:,1),2)));
90.     end
91. end
92. toc%====================================================================
93. %-------------------------- SETTING RETURN -----------------------------
94. %changes from RGB to BGR space
95. resultImg = cat(3, imgOrig(:,:,3), imgOrig(:,:,2), imgOrig(:,:,1));
96. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy.

Top