我使用以下功能过滤图像。基本上它将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);
处理后,图像如下所示: 我需要该功能删除图像中的细节(例如毛衣上的图案,裤子上的阴影),这似乎工作得很好。但是,该功能也使图像非常模糊。如何删除细节,以及保持区域结构清晰?例如,毛衣/裤子区域的色彩区域将比以前更均匀。
答案 0 :(得分:1)
你基本上应用了#34;本地低通滤波器" 难怪"模糊"看起来是结果,你删除了我们通常解释为高频的数据和"锐度"。
你真正应该做的是删除高频细节,同时保持大的优势 一个好的方法是使用像各向异性扩散这样的东西 通过使用优化的参数,您将能够实现您追求的外观 通常,这些方法称为图像抽象。
这是一个用于高级各向异性扩散的优秀开源代码:
https://github.com/RoyiAvital/Fast-Anisotropic-Curvature-Preserving-Smoothing
如果你能做出贡献,那就太棒了。