我在此代码部分中遇到了一些错误
Class MyClass : System.IComparable
{
[int] $Value
MyClass([int] $v)
{
$this.Value = $v
}
[int] CompareTo($that)
{
return $this.Value - $that.Value
}
}
$instance1 = [MyClass]::new(1)
$instance2 = [MyClass]::new(2)
Write-Output ($instance1 -lt $instance2)
#Output: True
Write-Output ($instance1 -le $instance2)
#Output: True
Write-Output ($instance1 -ge $instance2)
#Output: False
Write-Output ($instance1 -gt $instance2)
#Output: False
我得到的错误:
X=imread ('Lighthouse.jpg'); %reads picture as int8 matrix
figure, imagesc(X), colormap gray, title('original picture'), % display picture
filter=[-1 0 1; -2 0 2; -1 0 1]; % builds Sobel filter matrix
filter=single(filter); %convert double to single
x=single(X); % convert int8 to single
x=x/max(max(x)); %normalisation to [0,1]
当我按照建议使用Error using /
Inputs must be 2-D, or at least one input must be scalar.
To compute elementwise RDIVIDE, use RDIVIDE (./) instead.
Error in sobel (line 10)
x=x/max(max(x)); %normalisation to [0,1]
时,我收到新错误:
./
我在规范化步骤中做错了。
如何解决此问题?
答案 0 :(得分:2)
为什么你叫max两次。如果我用
运行代码x=x/max(x(:))
我没有收到错误。这将以1D运行矩阵。
答案 1 :(得分:2)
虽然Caduceus' answer是正确的;它一次性对所有三种颜色进行标准化。对于您的情况,可能更好的是rgb2gray
,以获得单个颜色通道,然后将其标准化(使用x/max(x(:))
)。
X=imread ('lighthouse.png'); %reads picture as int8 matrix
filter=[-1 0 1; -2 0 2; -1 0 1]; % builds Sobel filter matrix
filter=single(filter); %convert double to single
x = single(rgb2gray(X)); % rgb2gray gives a uint8, you want single
% x=x/max(x(:)); %normalisation to [0,1] , not needed here as x can directly be used
% for Sobel purposes as it's a grey scale image.
figure;
subplot(1,2,1)
imagesc(X)
colormap(gray)
title('original picture'), % display picture
subplot(1,2,2)
imagesc(x)
colormap(gray)
title 'Grey scale'
第一个错误的原因是max
给出了列的最大值,并且这是一个3D矩阵。 max(max())
因此得到1D而不是期望的标量。
然后发生第二个错误,因为max(max())
给出了一个数组,它与完整矩阵没有相同数量的条目(显然)。
基本上是size(x) = [row, column channels]
,size(max(x)) = [row channels]
和size(max(max(x)) = [row]
。使用冒号运算符实际上使整个3D矩阵成为单个列向量,max(x(:))
因此提供单个值,这是所有行,列和通道的最大值。
答案 2 :(得分:-2)
当我运行您的代码时,错误消息显示“使用RDIVIDE(./)”。 像这样实现它:
x=x./max(max(x));
这将每个RGB图层除以其最大值。您可能必须复制最大值(我猜这取决于matlab版本),请改用此行
x=x./repmat(max(max(x)),size(X,1),size(X,2),1);