1

这是我的第一篇文章。我希望有人可以帮助我开始。所以我一直在为一个班级项目进行图像处理。我们从头开始创建一个 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

太感谢了!

4

0 回答 0