0

我试图让 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 的一个功能。

任何帮助表示赞赏,在此先感谢=)

4

1 回答 1

0

我可以在函数的开头使用以下内容修复它:

x=x(:,:,1);
x=double(x);

=)。

于 2016-05-24T19:24:18.617 回答