【问题标题】:One or more output arguments not assigned during call to mdwt - Wavelet Transform在调用 mdwt 期间未分配一个或多个输出参数 - 小波变换
【发布时间】:2012-06-11 19:07:08
【问题描述】:

我正在尝试使用小波变换过滤图像。我尝试从这里使用函数mdwthttp://www.mathworks.com/matlabcentral/fileexchange/6391-wavelets-based-denoising/content/mdwt.m,以及来自此链接的其他函数,如下所示:

img = imread('A10T_1.jpg');       
h = daubcqf(4,'min');
L = 1;
y = mdwt(img,h,L);

问题是在最后一行我得到:One or more output arguments not assigned during call to, Error in => y = mdwt(img,h,L);

问题出在哪里?函数mdwt 仅包含声明,仅此而已,我可以看到这就是问题所在。谁能帮我解决这个问题?或者有没有其他方法可以在不使用这些函数的情况下使用小波变换过滤图像?

提前致谢。

编辑:

现在我正在尝试使用以下代码显示图像去噪使用小波变换:

RGB = imread('small.jpg');
 J = imnoise(RGB,'salt & pepper',0.05);h = daubcqf(6);  
      noisyLena = J;
      figure; colormap(gray); imagesc(RGB); title('Original Image');
       figure; colormap(gray); imagesc(noisyLena); title('Noisy Image'); 
%       Denoise lena with the default method based on the DWT
      [denoisedLena,xn,opt1] = denoise(noisyLena,h);
      figure; colormap(gray); imagesc(denoisedLena); title('denoised Image');  

但我得到了错误

??? The matrix row dimension must be of size m*2^(L)

Error in ==> denoise at 171
  [xd , LL]= mdwt(double(i),h,L);

Error in ==> wavelet_start at 20
      [denoisedLena,xn,opt1] = denoise(noisyLena,h);

去噪函数在哪里:http://www.mathworks.com/matlabcentral/fileexchange/6391-wavelets-based-denoising/content/denoise.m

问题出在哪里?

【问题讨论】:

    标签: image matlab image-processing wavelet


    【解决方案1】:

    该集合中的许多文件都是用 C 编写的 MEX 文件。M 文件仅用于文档,但由于您没有编译 MEX 文件,MATLAB 正在尝试为代码本身。您需要先为您的平台构建它们,然后才能运行代码。

    尝试阅读提供的 INSTALL.txt 文档,这相当于在该目录中运行“编译”。

    您的下一个挑战将是此代码过时,并且您可能与较新的 MATLAB 版本存在兼容性问题。但是试试看,看看会发生什么。

    【讨论】:

    • 感谢您的回答。我已经完成了 install.txt 中的所有操作,但是现在当我运行此代码时,我得到一个分段违规和一个大列表......它看起来像这样:pastebin.com/CwpUHPLR。我的matlab版本可能太新了。你怎么看?
    • 嗯,MEX文件编译后,没有明显的兼容性问题。很有可能,输入验证未完成,并且您传入了一些意想不到的东西。实际上,该函数看起来需要一个双精度数组,而您可能传入的是一个整数数组。此外,3 通道图像的 DWT 没有任何意义,因此像您这样传入 3D 数组可能会导致更多麻烦。
    • 彩色图像的 DWT 没有意义,所以你需要弄清楚你想让你的算法做什么。也许转换为灰度。然后在调用小波函数之前将您的二维数组转换为双精度。
    • 我输入了 i=rgb2gray(img), y = mdwt(i,h, L) 但这并没有改变任何东西。
    • 你仍然没有转换成双倍。 y = mdwt(double(i), h, L)
    【解决方案2】:

    您尝试使用的功能定义为

    function [y,L] = mdwt(x,h,L);
    

    当您在代码中调用该函数时,您只需分配第一个输出参数

    y = ...
    

    函数有两个输出参数,

    [y,L] = ...
    

    在使用该功能时,您必须同时分配两者。

    【讨论】:

    • 这不是问题。使用 [y, L]= .. 我得到同样的结果。彼得说的是对的,但我仍然可以运行我的代码。
    • 好的,我只使用了 Wavelet Toolbox,它应该可以让你做你想做的事。但我猜你无权访问它?
    • 不,我无权访问它:|我想使用这段代码,但我得到了这个pastebin.com/CwpUHPLR :(
    • 我会听从 Peters 关于阅读 install.txt 文件的建议。我对 3rd 方 matlab 代码的经验相当有限。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多