这是我的第一篇文章。我希望有人可以帮助我开始。所以我一直在为一个班级项目进行图像处理。我们从头开始创建一个 Haar 变换函数,这很简单,然后将其应用于预设图片,例如 cameraman.tif。但是,该示例图片是灰度和方阵。
现在我们取得了很大的飞跃,我们应该将过滤器应用于任何矩形彩色图片。我知道,如果我imread(picture)
将创建一个包含三个值的数组矩阵,分别代表红色、绿色和蓝色 (RGB)。我也明白,原则上我必须使用一个for
循环来遍历每个颜色通道。然而,它让我不知道如何为不同的频道创建它并将图像重新组合在一起。
我在这里经历了一些很棒的答案,并且能够重建女人和水果篮的例子,但不幸的是它们都使用了预设DWT
功能,我不能这样做。
最终代码应该是这样的: 1)询问用户需要多少次迭代:
pic = input('What picture would you like? Type "1" for an example or a URL ');
2)向用户询问阈值
t = input('Threshold?');
3)询问用户多少次迭代(1-3)
i = input('How many iterations do you want? Choose 1-3. ');
作为示例图像,我选择了一个矩形位图,因为它还没有被压缩并且使用“1”作为一个简单的标识符:
if pic ==1;
A = imread ('http://readingeagle.com/BlogUploads/11/Birds%20in.bmp');
else A = imread(pic) ;
end
%[m,n]=Matrix dimensions, c=channels
[m,n,c]=size (A) ;
%plot original
imshow (A);
现在我们必须执行 Daubchechies 小波变换,无论用户指定多少次迭代,同时将阈值绝对值之外的值设置为零。在重建图像之前。
我希望我提供了足够的信息,如果我已经出错了,请纠正我(我希望不会)。每次我实现循环并尝试处理通道时,我的代码都会开始中断。仅供参考,这里是适用于原始 cameraman.tif 图像的 Haar 变换:
%HWTM - Haar Wavelet Transform Matrix
function W = HWTM(N)
while mod(N,2) ~= 0;
N = N-1;
end
W=zeros(N);
for k=1:N/2
W(k,2*k)=1/2;
W(k,2*k-1)=1/2;
W(N/2+k,2*k)=1/2;
W(N/2+k,2*k-1)=-1/2;
end
end
太感谢了!