5

matlabに2つの行列があります。

> IRwindow =
> 
>   **183**  171  150  125  137
    138  167  184  173  152
    105  114  141  167  185  
    148  113  105  115  141  
    186  183  147  112  105
> 
> ILwindow =
> 
>   **201**  170  165  177  203
    181  174  167  169  189 
    154  150  156  168  181 
    187  175  158  131  144 
    173  186  183  167  141

これらの2つの行列を要素ごとに減算して、結果を取得したいと思います。たとえば、最初の要素(183 --201 = -18)の場合ですが、この要素の出力はゼロになります。結果は次のようになります。

> IRwindow - ILwindow

 ans =

     **0**    1    0    0    0
     0    0   17    4    0
     0    0    0    0    4
     0    0    0    0    0    
     13    0    0    0    0

どうすれば実際の結果を維持できますか?結果マトリックスのネガに対してゼロを取得せずに

4

3 に答える 3

6

次のサンプルコードを実行します。

%# Create random matrices
X = randi(100, 5, 5);
Y = randi(100, 5, 5);

%# Convert to strictly non-negative format
X = uint8(X);
Y = uint8(Y);

%# Perform subtractions
A = X - Y;

%# Convert to double format
X = double(X);
Y = double(Y);

%# Perform subtraction
B = X - Y;

特定のサンプル実行について:

A =

    0   15   36    0    0
    0    0    0    0    3
    0    0    0   25    0
   13    0   15    0    0
    0   49    0    0   14

その間:

B =

    -8    15    36    -4   -65
     0   -47   -45   -11     3
   -18   -17   -11    25   -52
    13   -53    15   -15    -1
   -35    49   -47    -8    14

のすべての負の数がA0に置き換えられ、の負の数Bが正しく表示されていることがわかります。

簡単に言うと、負の数を格納できない数値形式を使用する場合、Matlabは0で切り捨てます。解決策は、次のような「実数」(またはその近似値)に対応できる形式に変換することです。double、またはおそらくあなたの場合、、、、またはなどの形式の1つがより適切でintある可能性があります。int8int16int32int64

于 2013-02-04T00:02:17.110 に答える
2

もう1つのオプションは、次のように1行でsingleまたは減算を使用することです。double

 ans=double(IRwindow-ILwindow) 
于 2013-02-04T00:10:53.987 に答える
0

私はあなたと同じ問題を抱えていません:私はこのコードを持っています:

IRwindow = [

183  171  150  125  137
138  167  184  173  152
105  114  141  167  185  
148  113  105  115  141  
186  183  147  112  105]

ILwindow = [

201  170  165  177  203
181  174  167  169  189 
154  150  156  168  181 
187  175  158  131  144 
173  186  183  167  141]


IRwindow - ILwindow

そして私はこの出力を取得します:

IRwindow =

   183   171   150   125   137
   138   167   184   173   152
   105   114   141   167   185
   148   113   105   115   141
   186   183   147   112   105


ILwindow =

   201   170   165   177   203
   181   174   167   169   189
   154   150   156   168   181
   187   175   158   131   144
   173   186   183   167   141


ans =

   -18     1   -15   -52   -66
   -43    -7    17     4   -37
   -49   -36   -15    -1     4
   -39   -62   -53   -16    -3
    13    -3   -36   -55   -36

行列が正しく作成されていることを確認してください(符号なし整数ではなくdoubleとして)。

于 2013-02-04T00:04:20.290 に答える