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

📄 deblockc

📁 jpeg的matlab代码
💻
字号:
# deblockc - calculate AC coefficients in a smoothing scheme## SYNOPSIS#	deblockc()#	deblockc(k)#	deblockc(k, N)## DESCRIPTION#       deblockc is a Maple procedure to find the AC coefficients (in terms #       of the DC coefficients) which could be used as part of a smoothing #       procedure to reduce blocking artifacts (the telltale discontinuities#       between blocks which often follow aggressive quantizing) in JPEG.##       The polynomial#          p = a_1 x^2 y^2 + a_2 x^2 y + a_3 x y^2 + a_4 x^2 + a_5 x y#                + a_6 y^2 + a_7 x +a_8 y + a_9#       is fitted using the DC coefficients from nearest neighbors:##           ------------------- x#          | DC1 | DC2 | DC3 |#          |-----------------|#          | DC4 | DC5 | DC6 |#          |-----------------|#          | DC7 | DC8 | DC9 |#          |-----------------#          y##       The coefficients are chosen so that the average over the NxN #       DC_i subblock is DC_i. (There is a scaling factor--see below.) #       N defaults to 8; k specifies the number of coefficients to #       find (defaults to 5).##       The idea is that low-frequency zero AC coefficients in the center #       block will be will be replaced by values from the (transformed)#       polynomial. The procedure is described in Pennebaker and Mitchell,#       "JPEG Still Image Data Compression Standard", Van Nostrand Reinhold.## EXAMPLE#       The two statements#         AC := deblockc():#         AC := deblockc(5,8): #       produce the same results. The zigzag sequence AC[0,0], AC[0,1],#       AC[1,0], ..., AC[0,3] is displayed (first symbolically, then#       numerically), and the results are stored in AC.## BUGS#       This is a hack.# Copyright (C) 1995-1997 Darrel Hankerson and Greg A. Harris## This file is part of the JPEGtool collection of scripts for Octave# and Matlab; see http://www.dms.auburn.edu/compression## The JPEGtool collection is free software; you can redistribute it# and/or modify it under the terms of the GNU General Public License# as published by the Free Software Foundation; either version 2, or# (at your option) any later version.## The collection is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this package; see the file COPYING.  If not, write to the# Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA# 02111-1307, USA.deblockc := proc()  local N, terms, i, X, AC, row, col, v,u, y, x, n, z,        p, dct, zigzag;  if nargs < 2 then N := 8; else N := args[2] fi;  if nargs < 1 then terms := 5; else terms := args[1] fi;for i from 1 to 9 do;   a.i := evaln(a.i);od;p := proc(y,x) a1*x^2*y^2 + a2*x^2*y + a3*x*y^2 + a4*x^2 + a5*x*y + a6*y^2  + a7*x +a8*y + a9end:# In the "standard" transform, the DC coefficient is N^2/(2*sqrt (2N))# times the block averages. Adjustment made below.for i from 1 to 9 do;  row := floor((i-1)/3) * N; col := ((i-1) mod 3) * N;  eq.i := sum(sum(p(y,x),y=row..row+N-1),                  x=col..col+N-1) - DC.i:od:assign( solve({seq(eq.i, i=1..9)}, {seq(a.i, i=1..9)}) );X := array(0..N-1, 0..N-1);for y from 0 to N-1 do;  for x from 0 to N-1 do;     X[y,x] := p(y+N, x+N)  odod;dct := proc(X, v, u)  local x, y, w, N, C;  N := op(2,eval(X))[1]; N := op(2,N) - op(1,N) + 1;  C := proc(w)    if not type(w, 'numeric') then       RETURN( 'procname(args)' )    fi;    if w = 0 then 1/sqrt(2) else 1 fi  end:  w := Pi/(2*N);  C(v)*C(u)/sqrt(2*N) *   sum(cos((2*y+1)*v*w) * sum(X[y,x]*cos((2*x+1)*u*w), x=0..N-1),       y=0..N-1)end:zigzag := proc(N)  local u, v, inc, n, z;  z := array(0..N*N-1, 0..1);  u := -1; v := 1; inc := 1;  for n from 0 to N*N-1 do;     v := v - inc; u := u + inc;    if (u >= N) then      v := v + 2; u := N-1; inc := -1;    elif (v = -1) then      v := 0; inc := -1;    elif (v >= N) then      u := u + 2; v := N-1; inc := 1;    elif (u = -1) then       u := 0; inc := 1;    fi;    z[n, 0] := v; z[n,1] := u;  od;  zend:z := zigzag(N); AC := array(0..N, 0..N);for n from 0 to terms do;  v := z[n,0]; u := z[n,1];  AC[v,u] :=  collect( dct(X,v,u), {seq(DC.i, i=1..9)} ) * 2*sqrt(2*N);  print(evaln(AC[v,u]) = AC[v,u]);od:for n from 0 to terms do;  v := z[n,0]; u := z[n,1];  print(evaln(AC[v,u]) = evalf(AC[v,u]));od:ACend:`help/text/deblockc` := TEXT(`FUNCTION: deblockc - find coefficients in deblocking scheme`,`   `,`CALLING SEQUENCE:`,`   deblock(k, N)`,`   `,`PARAMETERS:`,`   k  - (optional, default 5) number of terms to find`,`   N  - (optional, default 8) size of block in the transform`,`   `,`SYNOPSIS:`,`- The function deblockc finds coefficients of a polynomial to be used`,`  by a smoothing procedure in an effort to reduce blocking artifacts `,`  (the telltale discontinuities between blocks which often follow`,`  aggressive quantizing). For a given block, a polynomial is fitted using`,`  the DC coefficients from nearest neighbors.`,`  `,`- The matrix of coefficients is returned.`,` `,`- See Pennebaker and Mitchell, "JPEG Still Image Data Compression Standard"`,`  Van Nostrand Reinhold, 1993.`):#save `deblockc.m`;#quit

⌨️ 快捷键说明

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