Matlab中的DCT滤镜图像

时间:2014-11-07 00:24:19

标签: matlab image-processing dct

我使用以下功能过滤图像。基本上它将DCT的系数设置为0,除了左上角的8x8元素,这意味着它滤除了所有高频部分并且只留下了低频部分。

function I_out = em_DCT_filter(I_in,N)

I_trim = double(I_in)-128;

MYDCT=dctmtx(N);
dct = @(block_struct)MYDCT*block_struct.data*MYDCT';
B=blockproc(I_trim,[N,N],dct);

mask = zeros(N,N);
mask(1:N/4,1:N/4)= 1;

AnselmMask = @(block_struct)block_struct.data.*mask;
BMask=blockproc(B,[N N],AnselmMask);

InverseDct = @(block_struct)MYDCT'*block_struct.data*MYDCT;
BReversedl = blockproc(BMask,[N N],InverseDct);

I_out= uint8(BReversedl+128);

处理后,图像如下所示: before filter after filter 我需要该功能删除图像中的细节(例如毛衣上的图案,裤子上的阴影),这似乎工作得很好。但是,该功能也使图像非常模糊。如何删除细节,以及保持区域结构清晰?例如,毛衣/裤子区域的色彩区域将比以前更均匀。

1 个答案:

答案 0 :(得分:1)

你基本上应用了#34;本地低通滤波器" 难怪"模糊"看起来是结果,你删除了我们通常解释为高频的数据和"锐度"。

你真正应该做的是删除高频细节,同时保持大的优势 一个好的方法是使用像各向异性扩散这样的东西 通过使用优化的参数,您将能够实现您追求的外观 通常,这些方法称为图像抽象。

这是一个用于高级各向异性扩散的优秀开源代码:

https://github.com/RoyiAvital/Fast-Anisotropic-Curvature-Preserving-Smoothing

如果你能做出贡献,那就太棒了。