⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ifdct_wrapping.m

📁 Fast Discrete Curvelet Transform有正反变换,各个程序里面的参数都有详细的说明.
💻 M
📖 第 1 页 / 共 2 页
字号:
                                % A(B) = C where B and C are vectors, if                                % some value x repeats in B, then the                                % last occurrence of x is the one                                % corresponding to the eventual assignment.        end;        % Regular wedges        length_wedge = floor(4*M_vert) - floor(M_vert);        Y = 1:length_wedge;        first_row = floor(4*M_vert)+2-ceil((length_wedge+1)/2)+...            mod(length_wedge+1,2)*(quadrant-2 == mod(quadrant-2,2));        for subl = 2:(nbangles_perquad-1);            l = l+1;            width_wedge = wedge_endpoints(subl+1) - wedge_endpoints(subl-1) + 1;            slope_wedge = ((floor(4*M_horiz)+1) - wedge_endpoints(subl))/floor(4*M_vert);            left_line = round(wedge_endpoints(subl-1) + slope_wedge*(Y - 1));            [wrapped_XX, wrapped_YY] = deal(zeros(length_wedge,width_wedge));            first_col = floor(4*M_horiz)+2-ceil((width_wedge+1)/2)+...                mod(width_wedge+1,2)*(quadrant-3 == mod(quadrant-3,2));            for row = Y                cols = left_line(row) + mod((0:(width_wedge-1))-(left_line(row)-first_col),width_wedge);                new_row = 1 + mod(row - first_row, length_wedge);                wrapped_XX(new_row,:) = XX(row,cols);                wrapped_YY(new_row,:) = YY(row,cols);            end;            slope_wedge_left = ((floor(4*M_horiz)+1) - wedge_midpoints(subl-1))/floor(4*M_vert);            mid_line_left = wedge_midpoints(subl-1) + slope_wedge_left*(wrapped_YY - 1);            coord_left = 1/2 + floor(4*M_vert)/(wedge_endpoints(subl) - wedge_endpoints(subl-1)) * ...                (wrapped_XX - mid_line_left)./(floor(4*M_vert)+1 - wrapped_YY);            slope_wedge_right = ((floor(4*M_horiz)+1) - wedge_midpoints(subl))/floor(4*M_vert);            mid_line_right = wedge_midpoints(subl) + slope_wedge_right*(wrapped_YY - 1);            coord_right = 1/2 + floor(4*M_vert)/(wedge_endpoints(subl+1) - wedge_endpoints(subl)) * ...                (wrapped_XX - mid_line_right)./(floor(4*M_vert)+1 - wrapped_YY);            wl_left = fdct_wrapping_window(coord_left);            [wl_right,wr_right] = fdct_wrapping_window(coord_right);            switch is_real             case 0              wrapped_data = fftshift(fft2(ifftshift(C{j}{l})))/sqrt(prod(size(C{j}{l})));              wrapped_data = rot90(wrapped_data,(quadrant-1));             case 1              x = C{j}{l} + sqrt(-1)*C{j}{l+nbangles(j)/2};              wrapped_data = fftshift(fft2(ifftshift(x)))/sqrt(prod(size(x)))/sqrt(2);              wrapped_data = rot90(wrapped_data,(quadrant-1));            end;            wrapped_data = wrapped_data .* (wl_left .* wr_right);                        % Unwrapping data            for row = Y                cols = left_line(row) + mod((0:(width_wedge-1))-(left_line(row)-first_col),width_wedge);                new_row = 1 + mod(row - first_row, length_wedge);                Xj(row,cols) = Xj(row,cols) + wrapped_data(new_row,:);            end;        end;    % for subl                % Right corner wedge        l = l+1;        width_wedge = 4*floor(4*M_horiz) + 3 - wedge_endpoints(end) - wedge_endpoints(end-1);        slope_wedge = ((floor(4*M_horiz)+1) - wedge_endpoints(end))/floor(4*M_vert);        left_line = round(wedge_endpoints(end-1) + slope_wedge*(Y_corner - 1));        [wrapped_XX, wrapped_YY] = deal(zeros(length_corner_wedge,width_wedge));        first_row = floor(4*M_vert)+2-ceil((length_corner_wedge+1)/2)+...            mod(length_corner_wedge+1,2)*(quadrant-2 == mod(quadrant-2,2));        first_col = floor(4*M_horiz)+2-ceil((width_wedge+1)/2)+...            mod(width_wedge+1,2)*(quadrant-3 == mod(quadrant-3,2));                for row = Y_corner            cols = left_line(row) + mod((0:(width_wedge-1))-(left_line(row)-first_col),width_wedge);            admissible_cols = round(1/2*(cols+2*floor(4*M_horiz)+1-abs(cols-(2*floor(4*M_horiz)+1))));            new_row = 1 + mod(row - first_row, length_corner_wedge);            wrapped_XX(new_row,:) = XX(row,admissible_cols);            wrapped_YY(new_row,:) = YY(row,admissible_cols);                end;        YY = Y_corner'*ones(1,width_wedge);        slope_wedge_left = ((floor(4*M_horiz)+1) - wedge_midpoints(end))/floor(4*M_vert);        mid_line_left = wedge_midpoints(end) + slope_wedge_left*(wrapped_YY - 1);        coord_left = 1/2 + floor(4*M_vert)/(wedge_endpoints(end) - wedge_endpoints(end-1)) * ...            (wrapped_XX - mid_line_left)./(floor(4*M_vert)+1 - wrapped_YY);        C2 = -1/(2*(floor(4*M_horiz))/(wedge_endpoints(end) - 1) - 1 + 1/(2*(floor(4*M_vert))/(first_wedge_endpoint_vert - 1) - 1));        C1 = -C2 * (2*(floor(4*M_horiz))/(wedge_endpoints(end) - 1) - 1);        wrapped_XX((wrapped_XX - 1)/floor(4*M_horiz) == (wrapped_YY-1)/floor(4*M_vert)) = ...            wrapped_XX((wrapped_XX - 1)/floor(4*M_horiz) == (wrapped_YY-1)/floor(4*M_vert)) - 1;        coord_corner = C1 + C2 * (2-((wrapped_XX - 1)/(floor(4*M_horiz)) + (wrapped_YY - 1)/(floor(4*M_vert)))) ./ ...            ((wrapped_XX - 1)/(floor(4*M_horiz)) - (wrapped_YY - 1)/(floor(4*M_vert)));        wl_left = fdct_wrapping_window(coord_left);        [wl_right,wr_right] = fdct_wrapping_window(coord_corner);        switch is_real         case 0          wrapped_data = fftshift(fft2(ifftshift(C{j}{l})))/sqrt(prod(size(C{j}{l})));          wrapped_data = rot90(wrapped_data,(quadrant-1));         case 1          x = C{j}{l} + sqrt(-1)*C{j}{l+nbangles(j)/2};          wrapped_data = fftshift(fft2(ifftshift(x)))/sqrt(prod(size(x)))/sqrt(2);          wrapped_data = rot90(wrapped_data,(quadrant-1));        end;        wrapped_data = wrapped_data .* (wl_left .* wr_right);                 % Unwrapping data        for row = Y_corner            cols = left_line(row) + mod((0:(width_wedge-1))-(left_line(row)-first_col),width_wedge);            admissible_cols = round(1/2*(cols+2*floor(4*M_horiz)+1-abs(cols-(2*floor(4*M_horiz)+1))));            new_row = 1 + mod(row - first_row, length_corner_wedge);            Xj(row,fliplr(admissible_cols)) = Xj(row,fliplr(admissible_cols)) + wrapped_data(new_row,end:-1:1);                                % We use the following property: in an assignment                                % A(B) = C where B and C are vectors, if                                % some value x repeats in B, then the                                % last occurrence of x is the one                                % corresponding to the eventual assignment.        end;        Xj = rot90(Xj);            end;    % for quadrant        Xj = Xj .* lowpass;    Xj_index1 = ((-floor(2*M1)):floor(2*M1)) + floor(4*M1) + 1;    Xj_index2 = ((-floor(2*M2)):floor(2*M2)) + floor(4*M2) + 1;    Xj(Xj_index1, Xj_index2) = Xj(Xj_index1, Xj_index2) .* hipass;        loc_1 = Xj_topleft_1 + (0:(2*floor(4*M1)));    loc_2 = Xj_topleft_2 + (0:(2*floor(4*M2)));    X(loc_1,loc_2) = X(loc_1,loc_2) + Xj;    % Preparing for loop reentry or exit        Xj_topleft_1 = Xj_topleft_1 + floor(4*M1) - floor(2*M1);    Xj_topleft_2 = Xj_topleft_2 + floor(4*M2) - floor(2*M2);        lowpass = lowpass_next;    end;    % for jif is_real    Y = X;    X = rot90(X,2);    X = X + conj(Y);end    % Coarsest wavelet levelM1 = M1/2;M2 = M2/2;Xj = fftshift(fft2(ifftshift(C{1}{1})))/sqrt(prod(size(C{1}{1})));loc_1 = Xj_topleft_1 + (0:(2*floor(4*M1)));loc_2 = Xj_topleft_2 + (0:(2*floor(4*M2)));X(loc_1,loc_2) = X(loc_1,loc_2) + Xj .* lowpass;% Finest levelM1 = N1/3;M2 = N2/3;if finest == 1,    % Folding back onto N1-by-N2 matrix    shift_1 = floor(2*M1)-floor(N1/2);    shift_2 = floor(2*M2)-floor(N2/2);    Y = X(:,(1:N2)+shift_2);    Y(:,N2-shift_2+(1:shift_2)) = Y(:,N2-shift_2+(1:shift_2)) + X(:,1:shift_2);    Y(:,1:shift_2) = Y(:,1:shift_2) + X(:,N2+shift_2+(1:shift_2));    X = Y((1:N1)+shift_1,:);    X(N1-shift_1+(1:shift_1),:) = X(N1-shift_1+(1:shift_1),:) + Y(1:shift_1,:);    X(1:shift_1,:) = X(1:shift_1,:) + Y(N1+shift_1+(1:shift_1),:);    else        % Extension to a N1-by-N2 matrix    Y = fftshift(fft2(ifftshift(C{nbscales}{1})))/sqrt(prod(size(C{nbscales}{1})));    X_topleft_1 = ceil((N1+1)/2) - floor(M1);    X_topleft_2 = ceil((N2+1)/2) - floor(M2);    loc_1 = X_topleft_1 + (0:(2*floor(M1)));    loc_2 = X_topleft_2 + (0:(2*floor(M2)));    Y(loc_1,loc_2) = Y(loc_1,loc_2) .* hipass_finest + X;    X = Y;    end;x = fftshift(ifft2(ifftshift(X)))*sqrt(prod(size(X)));if is_real, x = real(x); end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -