我试图让 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
我不明白为什么它适用于任何手工制作的矩阵,但是当我尝试发送更大的东西(我的意思是,更多的行和列)时,它会给出“子矩阵定义不正确”。第 8 行的错误是“y(i,j)=aux(minpos);” 线。
编辑:补充一下,我正在使用“imread”导入图像,这是 SIVP 的一个功能。
任何帮助表示赞赏,在此先感谢=)