IM2在matlab R2014a中应用256*256矩阵时给出1*1矩阵的双精度
我想将256*256矩阵类型uint8转换为256*256矩阵类型double,但当我使用im2double()时,它会给我一个1*1矩阵类型double 我想对我的图像做一个gamma变换,因为我需要使用幂函数,这反过来要求我使用double类型的矩阵,因为用户将输入double类型的gamma值,幂函数表示,当矩阵和标量都是同一类型,即double时,它可以操作 代码如下:IM2在matlab R2014a中应用256*256矩阵时给出1*1矩阵的双精度,matlab,Matlab,我想将256*256矩阵类型uint8转换为256*256矩阵类型double,但当我使用im2double()时,它会给我一个1*1矩阵类型double 我想对我的图像做一个gamma变换,因为我需要使用幂函数,这反过来要求我使用double类型的矩阵,因为用户将输入double类型的gamma值,幂函数表示,当矩阵和标量都是同一类型,即double时,它可以操作 代码如下: b=imread('cameran.tif'); [m,n]=尺寸(b); c=输入(“输入c的值”); gamma
b=imread('cameran.tif');
[m,n]=尺寸(b);
c=输入(“输入c的值”);
gamma=输入(“输入gamma值”);
I2=im2倍(b);
对于i=1:m
对于j=1:n
I2=c*功率(I2(i,j),γ);
结束
结束
imshow(I2,[])
不要使用im2double
,你的矩阵b
就是一个[256 x 256]
矩阵。只需使用double(b)
,或者作为一行:b=double(imread('cameran.tif')代码>
您很可能也可以改进for
循环(通过完全删除它以支持对等式进行矢量化),使用bsxfun
:
I2 = c*bsxfun(@power, b, gamma);
正如事后所想:
I2 = c*b.^gamma;
可能有用,但我还没有测试过。im2double仍然给我1*1矩阵,当我使用bsxfun函数时,它给出了一个错误“整数只能提升为正整数幂”。在我按照第一行中的u建议使用double进行转换后。但您的第二个解决方案很好。我不能使用im2double函数,但在文档和互联网上的其他示例中,它运行良好。有什么线索吗。感谢ans,尽管代码已经开始工作了。