2012-05-30 52 views
0

我有下面的代码,我试图在过滤后对图像进行归一化,但问题是一旦它到达第5行,它就会将每个变为0,并且它返回给我黑色图像。任何想法 ?过滤后的Matlab图像归一化

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 

回答

2

你不知道哪个值new_maxnew_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_test的示例数据。通过使用randrandi。如果随机数据给你非零,问题在imga_test

  2. new_max-new_min为零,表示new_maxnew_min具有相同的值。您是否尝试更改new_maxnew_min的值并更改其差异?如果更改new_max,new_min或这两者的值为非零值,则问题出现在new_maxnew_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)

这第三种情况是非常不可能的。

1

我会尝试介绍pre v.s.后处理图像:

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