一、简介

1 curvelet变换的提出


2 curvelet变换的研究进展及现状


3 第一代curvelet变换








4 实现过程


5 第二代 curvelet变换


6 连续的curvelet变换







7 离散的curvelet变换


二、源代码

function x = ifdct_wrapping(C, is_real, M, N)% ifdct_wrapping.m - Inverse Fast Discrete Curvelet Transform via wedge wrapping - Version 1.0
% This is in fact the adjoint, also the pseudo-inverse
%
% Inputs
%   C           Cell array containing curvelet coefficients (see
%               description in fdct_wrapping.m)
%   is_real     As used in fdct_wrapping.m
%   M, N        Size of the image to be recovered (not necessary if finest
%               = 2)
%
% Outputs
%   x           M-by-N matrix
%
% See also fdct_wrapping.m
%
% By Laurent Demanet, 2004% Initialization
nbscales = length(C);
nbangles_coarse = length(C{2});
nbangles = [1, nbangles_coarse .* 2.^(ceil((nbscales-(nbscales:-1:2))/2))];
if length(C{end}) == 1, finest = 2; else finest = 1; end;
if finest == 2, nbangles(nbscales) = 1; end;
if nargin < 2, is_real = 0; end;
if nargin < 4,if finest == 1, error('Syntax: IFCT_wrapping(C,M,N) where the matrix to be recovered is M-by-N'); end;[N1,N2] = size(C{end}{1});
elseN1 = M;N2 = N;
end;M1 = N1/3;
M2 = N2/3;if finest == 1;bigN1 = 2*floor(2*M1)+1;bigN2 = 2*floor(2*M2)+1;X = zeros(bigN1,bigN2);% Initialization: preparing the lowpass filter at finest scalewindow_length_1 = floor(2*M1) - floor(M1) - 1 - (mod(N1,3)==0);window_length_2 = floor(2*M2) - floor(M2) - 1 - (mod(N2,3)==0);coord_1 = 0:(1/window_length_1):1;coord_2 = 0:(1/window_length_2):1;[wl_1,wr_1] = fdct_wrapping_window(coord_1);[wl_2,wr_2] = fdct_wrapping_window(coord_2);lowpass_1 = [wl_1, ones(1,2*floor(M1)+1), wr_1];if mod(N1,3)==0, lowpass_1 = [0, lowpass_1, 0]; end;lowpass_2 = [wl_2, ones(1,2*floor(M2)+1), wr_2];if mod(N2,3)==0, lowpass_2 = [0, lowpass_2, 0]; end;lowpass = lowpass_1'*lowpass_2;scales = nbscales:-1:2;elseM1 = M1/2;M2 = M2/2;bigN1 = 2*floor(2*M1)+1;bigN2 = 2*floor(2*M2)+1;X = zeros(bigN1,bigN2);window_length_1 = floor(2*M1) - floor(M1) - 1;window_length_2 = floor(2*M2) - floor(M2) - 1;coord_1 = 0:(1/window_length_1):1;coord_2 = 0:(1/window_length_2):1;[wl_1,wr_1] = fdct_wrapping_window(coord_1);[wl_2,wr_2] = fdct_wrapping_window(coord_2);lowpass_1 = [wl_1, ones(1,2*floor(M1)+1), wr_1];lowpass_2 = [wl_2, ones(1,2*floor(M2)+1), wr_2];lowpass = lowpass_1'*lowpass_2;hipass_finest = sqrt(1 - lowpass.^2);scales = (nbscales-1):-1:2;end;% Loop: pyramidal reconstructionXj_topleft_1 = 1;
Xj_topleft_2 = 1;
for j = scales,M1 = M1/2;M2 = M2/2;window_length_1 = floor(2*M1) - floor(M1) - 1;window_length_2 = floor(2*M2) - floor(M2) - 1;coord_1 = 0:(1/window_length_1):1;coord_2 = 0:(1/window_length_2):1;[wl_1,wr_1] = fdct_wrapping_window(coord_1);[wl_2,wr_2] = fdct_wrapping_window(coord_2);lowpass_1 = [wl_1, ones(1,2*floor(M1)+1), wr_1];lowpass_2 = [wl_2, ones(1,2*floor(M2)+1), wr_2];lowpass_next = lowpass_1'*lowpass_2;hipass = sqrt(1 - lowpass_next.^2);Xj = zeros(2*floor(4*M1)+1,2*floor(4*M2)+1);% Loop: anglesl = 0;nbquadrants = 2 + 2*(~is_real);nbangles_perquad = nbangles(j)/4;for quadrant = 1:nbquadrantsM_horiz = M2 * (mod(quadrant,2)==1) + M1 * (mod(quadrant,2)==0);M_vert = M1 * (mod(quadrant,2)==1) + M2 * (mod(quadrant,2)==0);if mod(nbangles_perquad,2),wedge_ticks_left = round((0:(1/(2*nbangles_perquad)):.5)*2*floor(4*M_horiz) + 1);wedge_ticks_right = 2*floor(4*M_horiz) + 2 - wedge_ticks_left;wedge_ticks = [wedge_ticks_left, wedge_ticks_right(end:-1:1)];elsewedge_ticks_left = round((0:(1/(2*nbangles_perquad)):.5)*2*floor(4*M_horiz) + 1);wedge_ticks_right = 2*floor(4*M_horiz) + 2 - wedge_ticks_left;wedge_ticks = [wedge_ticks_left, wedge_ticks_right((end-1):-1:1)];end;wedge_endpoints = wedge_ticks(2:2:(end-1));         % integerswedge_midpoints = (wedge_endpoints(1:(end-1)) + wedge_endpoints(2:end))/2;% Left corner wedgel = l+1;first_wedge_endpoint_vert = round(2*floor(4*M_vert)/(2*nbangles_perquad) + 1);length_corner_wedge = floor(4*M_vert) - floor(M_vert) + ceil(first_wedge_endpoint_vert/4);Y_corner = 1:length_corner_wedge;[XX,YY] = meshgrid(1:(2*floor(4*M_horiz)+1),Y_corner);width_wedge = wedge_endpoints(2) + wedge_endpoints(1) - 1;slope_wedge = (floor(4*M_horiz) + 1 - wedge_endpoints(1))/floor(4*M_vert);left_line = round(2 - wedge_endpoints(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_cornercols = left_line(row) + mod((0:(width_wedge-1))-(left_line(row)-first_col),width_wedge);new_row = 1 + mod(row - first_row, length_corner_wedge);admissible_cols = round(1/2*(cols+1+abs(cols-1)));wrapped_XX(new_row,:) = XX(row,admissible_cols);wrapped_YY(new_row,:) = YY(row,admissible_cols);end;slope_wedge_right = (floor(4*M_horiz)+1 - wedge_midpoints(1))/floor(4*M_vert);mid_line_right = wedge_midpoints(1) + slope_wedge_right*(wrapped_YY - 1);% not integers% in generalcoord_right = 1/2 + floor(4*M_vert)/(wedge_endpoints(2) - wedge_endpoints(1)) * ...(wrapped_XX - mid_line_right)./(floor(4*M_vert)+1 - wrapped_YY);C2 = 1/(1/(2*(floor(4*M_horiz))/(wedge_endpoints(1) - 1) - 1) + 1/(2*(floor(4*M_vert))/(first_wedge_endpoint_vert - 1) - 1));C1 = C2 / (2*(floor(4*M_vert))/(first_wedge_endpoint_vert - 1) - 1);wrapped_XX((wrapped_XX - 1)/floor(4*M_horiz) + (wrapped_YY-1)/floor(4*M_vert) == 2) = ...wrapped_XX((wrapped_XX - 1)/floor(4*M_horiz) + (wrapped_YY-1)/floor(4*M_vert) == 2) + 1;coord_corner = C1 + C2 * ((wrapped_XX - 1)/(floor(4*M_horiz)) - (wrapped_YY - 1)/(floor(4*M_vert))) ./ ...(2-((wrapped_XX - 1)/(floor(4*M_horiz)) + (wrapped_YY - 1)/(floor(4*M_vert))));wl_left = fdct_wrapping_window(coord_corner);[wl_right,wr_right] = fdct_wrapping_window(coord_right);switch is_realcase 0wrapped_data = fftshift(fft2(ifftshift(C{j}{l})))/sqrt(prod(size(C{j}{l})));wrapped_data = rot90(wrapped_data,(quadrant-1));case 1x = 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 datafor row = Y_cornercols = left_line(row) + mod((0:(width_wedge-1))-(left_line(row)-first_col),width_wedge);admissible_cols = round(1/2*(cols+1+abs(cols-1)));new_row = 1 + mod(row - first_row, length_corner_wedge);Xj(row,admissible_cols) = Xj(row,admissible_cols) + wrapped_data(new_row,:);% 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;% Regular wedgeslength_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 = Ycols = 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_realcase 0wrapped_data = fftshift(fft2(ifftshift(C{j}{l})))/sqrt(prod(size(C{j}{l})));wrapped_data = rot90(wrapped_data,(quadrant-1));case 1x = 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 datafor row = Ycols = 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 wedgel = 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));function y= xinxishang(x)
%信息熵
x=uint8(x);
temp=unique(x);   %temp就是x中全部不同的元素,例如x=[1,1,3,4,1,5];那么temp=[1;3;4;5]
temp=temp';
len=length(temp); %求出x矩阵中不同元素的个数
p=zeros(1,len);   %p向量用来存储矩阵x中每个不同元素的个数
[m,n]=size(x);
for k=1:lenfor i=1:mfor j=1:nif x(i,j)==temp(1,k)p(1,k)=p(1,k)+1;endendend
end

三、运行结果




四、备注

版本:2014a

【图像融合】基于matlab curvelet变换图像融合(评价指标)【含Matlab源码 781期】相关推荐

  1. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  2. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  3. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  4. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计【含GUI源码 752期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计[含GUI源码 752期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  5. 【Matlab答题卡识别】hough变换答题卡判定与成绩统计(带面板)【含GUI源码 1017期】

    一.代码运行视频(哔哩哔哩) [Matlab答题卡识别]hough变换答题卡判定与成绩统计(带面板)[含GUI源码 1017期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 ...

  6. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  8. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  9. 【Matlab车牌识别】停车计费系统【含GUI源码 735期】

    一.代码运行视频(哔哩哔哩) [Matlab车牌识别]停车计费系统[含GUI源码 735期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MATLA ...

  10. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

最新文章

  1. IBM服务器49Y4230选件网卡在安装ESXI4.x认不到驱动参考
  2. lua 使用 spine 的一些问题
  3. 使用构建器模式来帮助您的单元测试
  4. 鸿蒙系统 安卓游戏,华为鸿蒙系统运行安卓游戏出现新状况!安卓换皮论被彻底打脸?...
  5. java中的与或运算
  6. C#反射机制详解(转)
  7. hive导数据到mysql 自增主键出错_面试官:MySQL表设计要注意什么?
  8. sqlserver text最大长度_1156. 单字符重复子串的最大长度
  9. poj3207 2-SAT
  10. 微软:今天起加速推广Windows 11,让更多设备免费升级
  11. 《mysql必知必会》学习笔记
  12. 想进入IT行业,自学还是选择培训机构。
  13. linux查看串口信息tty*
  14. 借助资本的力量,雷军仅花10年时间成为中国第九大富豪
  15. 电压源电流源电路符号及2B法
  16. Linux kali系统使用fcrackzip/rarcrack破解zip/rar(或者zip 7z)类型的加密压缩文件
  17. 分销商城系统体系设计
  18. PYTHON代码:根据FileRecord和MAP的关系,拼接IBM V7000 精简卷碎片
  19. 什么是舆情监测系统,如何选择舆情监测系统?
  20. 云服务器加固系统,云服务器加固

热门文章

  1. rabbitmq4-工作队列及公平分发模式
  2. 省选专练之数学 BZOJ2820 YY的GCD
  3. Topcoder的使用方法
  4. SQLServer数据库分页查询
  5. Linux基础教程之系统管理篇系统部署
  6. js 实现 间隙滚动效果
  7. 正则RegExp对象的用法
  8. 精通git中文版 (连载四)
  9. 传智播客 tcp长连接和短连接 学习笔记
  10. 自律selfdiscipline