我试图让Scilab接收某个JPEG图像,然后将其转换为0到255之间的值矩阵(正常的8位深度图像),然后将这些值重新排列为更小的深度。该提议是将所有选项从1位到7位分别转换为2,4,8,16,32,64和128种不同的颜色级别。
我们正在使用灰度图像来简化操作,因为我们可以简单地获取3个通道中的任何一个并将其作为行和列的矩阵使用。我知道有很多更好的方法可以做到这一点,但我需要使用Scilab,因为它适用于大学的图像处理课程(信号和线性系统主题来自电气工程)。
我能想到的是,它对我试过的测试矩阵运行良好,是:
function y=bits(x,p)
[rows, columns]=size(x);
y=zeros(rows,columns);
aux=round(linspace(0,255,2^p)); //define which values the output can have
for i=1:rows //varies rows
for j=1:columns //varies columns
[aux2,minpos]=min(abs(aux-x(i,j)));//calculates the closest value between the input and the possible output values
y(i,j)=aux(minpos); //get the calculated closest value and puts it at the output
end
end
endfunction
我能理解的是,为什么它适用于任何手工制作的矩阵,但是当我尝试发送更大的东西(我的意思是,更多的行和列)时,它会错误地给出" Submatrix定义&#34。第8行的错误是" Y(I,J)= AUX(minpos);"线。
编辑:只是添加,我使用" imread"导入图像,这是SIVP的功能。
感谢任何帮助,提前感谢=)
答案 0 :(得分:0)
我可以在函数开头用以下内容修复它:
x=x(:,:,1);
x=double(x);
=)。