|
| 1 | +%% Matting the transmission map |
| 2 | +% Code in this section was partly inspired by code originally from |
| 3 | +% http://www.soe.ucsc.edu/classes/ee264/Winter10/Proj6-Code.zip |
| 4 | + |
| 5 | + |
| 6 | +function t = softmatting(trans_est,im) |
| 7 | + |
| 8 | + win_size = 3; % window size |
| 9 | + win_els = win_size.^2; % number of window elements |
| 10 | + l_els = win_els.^2; % number of elements calculated in each iteration |
| 11 | + |
| 12 | + win_bord = floor(win_size./2); |
| 13 | + |
| 14 | + e = 0.000001; |
| 15 | + |
| 16 | + [m,n,c] = size(im); |
| 17 | + numpix = m*n; |
| 18 | + |
| 19 | + k = reshape(1:numpix, m, n); |
| 20 | + U = eye(win_size); |
| 21 | + D = eye(win_els); |
| 22 | + |
| 23 | + num_els = l_els*(m-2*win_bord)*(n-2*win_bord); |
| 24 | + |
| 25 | + ind_i = ones(1,num_els); |
| 26 | + ind_j = ind_i; |
| 27 | + |
| 28 | + els = zeros(1,num_els); |
| 29 | + |
| 30 | + count = 0; |
| 31 | + |
| 32 | + 'Aqui4' |
| 33 | + for x = (1 + win_bord):(n - win_bord) |
| 34 | + for y = (1 + win_bord):(m - win_bord) |
| 35 | + |
| 36 | + wk = reshape(im(y-win_bord:y+win_bord,x-win_bord:x+win_bord,:), win_els, c); |
| 37 | + |
| 38 | + w_ind = reshape(k(y-win_bord:y+win_bord,x-win_bord:x+win_bord), 1, win_els); |
| 39 | + |
| 40 | + [i j] = meshgrid(w_ind, w_ind); |
| 41 | + |
| 42 | + i = reshape(i,1,l_els); |
| 43 | + j = reshape(j,1,l_els); |
| 44 | + |
| 45 | + ind_i((count*l_els + 1):(count*l_els+l_els)) = i; |
| 46 | + ind_j((count*l_els + 1):(count*l_els+l_els)) = j; |
| 47 | + |
| 48 | + win_mu = mean(wk)'; |
| 49 | + |
| 50 | + win_cov = wk'*wk/win_els-win_mu*win_mu'; |
| 51 | + |
| 52 | + dif = wk' - repmat(win_mu,1,win_els); |
| 53 | + |
| 54 | + elements = D - (1 + dif(:,1:win_els)'*inv(... |
| 55 | + win_cov + e./win_els.*U)*dif(:,1:win_els))... |
| 56 | + ./win_els; |
| 57 | + |
| 58 | + els((count*l_els + 1):(count*l_els+l_els)) = ... |
| 59 | + reshape(elements,1,l_els); |
| 60 | + |
| 61 | + count = count + 1; |
| 62 | + end |
| 63 | + end |
| 64 | + |
| 65 | + |
| 66 | + L = sparse(ind_i, ind_j, els, numpix, numpix); |
| 67 | + |
| 68 | + %% generate refined transmission map |
| 69 | + 'Aqui6' |
| 70 | + % recommended value from HST paper |
| 71 | + lambda = .0001; |
| 72 | + % equation 15 from HST |
| 73 | + |
| 74 | + a=trans_est(:) .* lambda; |
| 75 | + 'Aqui6_1' |
| 76 | + b=lambda .* speye(size(L)); |
| 77 | + 'Aqui6_2' |
| 78 | + soma=L + b; |
| 79 | + 'Aqui6_3' |
| 80 | + t = (soma) \ a; |
| 81 | + |
| 82 | + 'Aqui61' |
| 83 | + t = t - min(t(:)); |
| 84 | + |
| 85 | + 'Aqui62' |
| 86 | + t = t ./ (max(t(:))); |
| 87 | + 'Aqui63' |
| 88 | + t = t .* (max(trans_est(:)) - min(trans_est(:))) + min(trans_est(:)); |
| 89 | + 'Aqui64' |
| 90 | + t = reshape(t, size(trans_est)); |
| 91 | + |
| 92 | +end |
0 commit comments