% 设置文件夹路径
input_folder = 'E:\水下目标识别\chinamm2019uw_train\jpegimage\';
output_folder = 'E:\水下目标识别\chinamm2019uw_train\processed_images\';

% 获取文件夹中的所有图像文件
file_list = dir([input_folder '*.jpg']);
num_files = length(file_list);

% 循环处理每个图像文件
for i = 1:num_files
    % 读取图像
    file_name = file_list(i).name;
    I = imread([input_folder file_name]);
    I_r = double(I(:,:,1));
    I_g = double(I(:,:,2));
    I_b = double(I(:,:,3));

    % 通道处理
    I_r_log = log(I_r+1);
    I_g_log = log(I_g+1);
    I_b_log = log(I_b+1);

    Rfft1 = fft2(I_r);
    Gfft1 = fft2(I_g);
    Bfft1 = fft2(I_b);
    
    [m,n] = size(I_r);
    sigma1 = 15;
    sigma2 = 80;
    sigma3 = 200;
    f1 = fspecial('gaussian', [m, n], sigma1);
    f2 = fspecial('gaussian', [m, n], sigma2);
    f3 = fspecial('gaussian', [m, n], sigma3);
    efft1 = fft2(double(f1));
    efft2 = fft2(double(f2));
    efft3 = fft2(double(f3));

    D_r1 = ifft2(Rfft1.*efft1);
    D_g1 = ifft2(Gfft1.*efft1);
    D_b1 = ifft2(Bfft1.*efft1);
    D_r_log1 = log(D_r1 + 1);
    D_g_log1 = log(D_g1 + 1);
    D_b_log1 = log(D_b1 + 1);
    R1 = I_r_log - D_r_log1;
    G1 = I_g_log - D_g_log1;
    B1 = I_b_log - D_b_log1;

    D_r2 = ifft2(Rfft1.*efft2);
    D_g2 = ifft2(Gfft1.*efft2);
    D_b2 = ifft2(Bfft1.*efft2);
    D_r_log2 = log(D_r2 + 1);
    D_g_log2 = log(D_g2 + 1);
    D_b_log2 = log(D_b2 + 1);
    R2 = I_r_log - D_r_log2;
    G2 = I_g_log - D_g_log2;
    B2 = I_b_log - D_b_log2;

    D_r3 = ifft2(Rfft1.*efft3);
    D_g3 = ifft2(Gfft1.*efft3);
    D_b3 = ifft2(Bfft1.*efft3);
    D_r_log3 = log(D_r3 + 1);
    D_g_log3 = log(D_g3 + 1);
    D_b_log3 = log(D_b3 + 1);
    R3 = I_r_log - D_r_log3;
    G3 = I_g_log - D_g_log3;
    B3 = I_b_log - D_b_log3;

    R = 0.1*R1 + 0.4*R2 + 0.5*R3;
    G = 0.1*G1 + 0.4*G2 + 0.5*G3;
    B = 0.1*B1 + 0.4*B2 + 0.5*B3;

    R = exp(R);
    MIN = min(min(R)); 
    MAX = max(max(R));
    R = (R - MIN)/(MAX - MIN);
    R = adapthisteq(R);
    G = exp(G);
    MIN = min(min(G)); 
    MAX = max(max(G));
    G = (G - MIN)/(MAX - MIN);
    G = adapthisteq(G);
    B = exp(B);
    MIN = min(min(B)); 
    MAX = max(max(B));
    B = (B - MIN)/(MAX - MIN);
    B = adapthisteq(B);

    J = cat(3, R, G, B);

    % 保存图像
    output_name = [output_folder file_name];
    imwrite(J, output_name);
end

以上代码将会批量处理E:\水下目标识别\chinamm2019uw_train\jpegimage文件夹中的所有jpg图像,并将处理后的图像保存到E:\水下目标识别\chinamm2019uw_train\processed_images文件夹中。


原文地址: http://www.cveoy.top/t/topic/pg58 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录