Advertisement
Guest User

Untitled

a guest
Jun 17th, 2013
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function fn = build(h, middle_index)
  2.     len = length(h);
  3.     max = len - middle_index;
  4.     min = 1 - middle_index;
  5.  
  6.     function v = getter(in)
  7.         if isnumeric(in)
  8.             v = h(in + middle_index);
  9.         else
  10.             if isequal(in,'max')
  11.                 v = max;
  12.             else
  13.                 v = min;
  14.             end
  15.         end
  16.     end
  17.     fn = @getter;
  18. end
  19.  
  20. function z = correlate(f,g,j)
  21.     z = 0;
  22.     min = g('min')-j;
  23.     max = g('max')-j;
  24.     for k = min:max
  25.         z = z + mirror(f,k)*g(k+j);
  26.     end
  27. end
  28.  
  29. function im2 = dwt(im, h, g, numOfIterations)
  30.     n = size(im,1);
  31.     i = 0;
  32.     im2 = double(im);
  33.     while i < numOfIterations
  34.         w = 1:n/2^i;
  35.         for r = w
  36.             im2(r,w) = dwt1d(im2(r,w),h,g);
  37.         end
  38.         for c = w
  39.             im2(w,c) = dwt1d(im2(w,c),h,g);
  40.         end
  41.         i = i + 1;
  42.     end
  43. end
  44.  
  45. function im2 = dwt1d(im, h, g)
  46.     n = length(im);
  47.     im2 = zeros(size(im));
  48.     for j = 1:n/2
  49.         im2(j) = correlate(im,h,-2*j);
  50.         im2(n/2+j) = correlate(im,g,-2*j);
  51.     end
  52. end
  53.  
  54. function im = dwtinv( im, h, g, numOfIterations )
  55.     n = size(im,1);
  56.     i = numOfIterations - 1;
  57.     while i >= 0
  58.         w = 1:n/2^i;
  59.         for r = w
  60.             im(r,w) = dwtinv1d(im(r,w),h,g);
  61.         end
  62.         for c = w
  63.             im(w,c) = dwtinv1d(im(w,c),h,g);
  64.         end
  65.         i = i - 1;
  66.     end
  67.     im = uint8(im);
  68. end
  69.  
  70. function im = dwtinv1d(im, h, g)
  71.     n = length(im);
  72.     f = im(1:n/2);
  73.     alpha = im(n/2+1:n);
  74.  
  75.     ming = g('min');
  76.     maxg = g('max');
  77.     minh = h('min');
  78.     maxh = h('max');
  79.     im(:) = 0;
  80.     for j = 1:n
  81.         for k = ceil((-maxh+j)/2) : floor((-minh+j)/2)
  82.             im(j) = im(j) + mirror(f,k)*h(j-2*k);
  83.         end
  84.         for k = ceil((-maxg+j)/2) : floor((-ming+j)/2)
  85.             im(j) = im(j) + mirror(alpha,k)*g(j-2*k);
  86.         end
  87.     end
  88. end
  89.  
  90. function [h,ht,g,gt] = haar()
  91.     t = 1/sqrt(2);
  92.     h = build(t*[1,1], 1);
  93.     ht = h;
  94.     g = build(t*[1,-1], 1);
  95.     gt = g;
  96. end
  97.  
  98. function v = mirror(f, k)
  99.     len = length(f);
  100.     if k < 1
  101.         k = 2 - k;
  102.     elseif k > len
  103.         k = len - (k - len);
  104.     end
  105.     v = f(k);
  106. end
  107.  
  108. function im2 = runforward(im, numOfIterations)
  109.     %im = rgb2gray(imread('lichtenstein.png'));
  110.     [~,ht,~,gt] = haar;
  111.     im2 = dwt( im, ht, gt, numOfIterations );
  112.     %figure;
  113.     %dwtshow(im2, numOfIterations);
  114. end
  115.  
  116. function im3 = runbackward(im2, numOfIterations)
  117.     [h,~,g,~] = haar;
  118.     im3 = dwtinv(im2, h, g, numOfIterations);
  119.     figure;
  120.     imshow(im3);
  121. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement