【问题标题】:im2double giving 1*1 matrix on applying to 256*256 matrix in matlab R2014aim2double 在 matlab R2014a 中应用于 256*256 矩阵时给出 1*1​​ 矩阵
【发布时间】:2015-09-02 19:53:31
【问题描述】:

我想将 256*256 矩阵类型 uint8 转换为 256*256 类型的 double 矩阵,但是当我使用 im2double() 时,它给了我一个 1*1 类型的 double 矩阵。

我想对我的图像进行伽玛变换,因为我需要使用幂函数,而这又需要我使用 double 类型的矩阵,因为用户将输入 double 类型的意志和幂函数的伽玛值表示它可以在矩阵和标量都是相同类型即双精度时运行

代码如下:

b=imread('cameraman.tif');
[m,n] = size(b);
c=input('enter value of c');
gamma=input('enter value of gamma');
I2 = im2double(b);

for i=1:m
    for j=1:n
        
        I2=c*power(I2(i,j),gamma);
               
       
    end
end
    
    imshow(I2,[]);

【问题讨论】:

    标签: matlab


    【解决方案1】:

    不要使用im2double,你的矩阵b就是这样,一个[256 x 256]矩阵。只需使用double(b),或者,作为一个衬里:b=double(imread('cameraman.tif'));

    您很可能也可以改进for 循环(通过完全删除它以支持对您的方程进行矢量化),使用bsxfun

    I2 = c*bsxfun(@power, b, gamma);
    

    只是事后的想法:

    I2 = c*b.^gamma;
    

    可能有效,但我没有对此进行测试。

    【讨论】:

    • im2double 仍然给我 1*1 矩阵,当我使用 bsxfun 函数时,它给出了这个错误“整数只能提升到正整数幂。”在我按照你在第一行中建议的那样使用 double 进行转换之后。但是你的第二个解决方案效果很好。我不能使用 im2double 功能,但在互联网上的文档和其他示例中它工作正常。任何线索。尽管代码开始工作,但感谢您的帮助。
    猜你喜欢
    • 2015-07-13
    • 1970-01-01
    • 2016-07-08
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    相关资源
    最近更新 更多