Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IM2在matlab R2014a中应用256*256矩阵时给出1*1矩阵的双精度_Matlab - Fatal编程技术网

IM2在matlab R2014a中应用256*256矩阵时给出1*1矩阵的双精度

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

我想将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=输入(“输入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,尽管代码已经开始工作了。