0

フィルタリング後に画像を正規化しようとしている次のコードがありますが、問題は、5 行目に到達するとすぐにすべてが 0 に変更され、黒い画像が返されることです。何か案が ?

 for i=1:10     
     temp_imag = imag_test1{i}(:,:);
     t_max = max(max(temp_imag));
     t_min = min(min(temp_imag));
     temp_imag = (temp_imag-t_min).*double(((new_max-new_min)/(t_max-t_min)))+double(new_min);
     imag_test1{i}(:,:) = temp_imag;
 end
4

2 に答える 2

2

new_maxどの値を取得して取得するかはわかりませんnew_minが、とにかく、5 行目 ( temp_imag = (temp_imag-t_min).*double(((new_max-new_min)/(t_max-t_min)))+double(new_min); ) の後ですべてがゼロになる場合は、いくつかの可能性があります。

  1. imga_test{i}( 1 <= i <= 10) はすべてゼロであり、ゼロnew_minでもあります。の値がimga_testすべてゼロではなく、変化することを確認しましたか? たとえば、サンプルデータを作成できますimga_testrandまたはを使用してrandi。ランダム データでゼロ以外が得られる場合、問題は にありimga_testます。

  2. new_max-new_minはゼロです。これは、new_maxnew_minが同じ値であることを意味します。new_maxとの値をnew_min変更して、その差を変更しようとしましたか? または両方の値を変更するnew_maxnew_min非ゼロになる場合、問題は と にnew_maxありnew_minます。

  3. solve方程式を解くために使用します。の場合new_min:

    solve('temp_imag = (temp_imag-t_min)*(((new_max-new_min)/(t_max-t_min)))+(new_min)', 'new_min'):

    ans = (new_max*t_min - new_max*temp_imag - t_min*temp_imag + t_max*temp_imag)/(t_max - temp_imag)

この 3 番目のケースは非常にありそうにありません。

于 2012-05-30T08:51:04.873 に答える
1

処理前と処理後の画像を提示してみます。

figure();
for i=1:10     
     temp_imag = imag_test1{i}(:,:);
     subplot( 1, 2, 1 ); imshow( temp_imag, [] ); title( 'pre' ); 
     t_max = max(max(temp_imag));
     t_min = min(min(temp_imag));
     temp_imag = (temp_imag-t_min).*double(((new_max-new_min)/(t_max-t_min)))+double(new_min);
     subplot( 1, 2, 2 ); imshow( temp_imag, [] );  title( 'post' );    
     imag_test1{i}(:,:) = temp_imag;
 end
于 2012-05-30T13:29:38.777 に答える