MSTAR数据集处理

1.原始MSTAR转换工具的使用

参考链接:

(1) MSTAR数据集下载地址及处理方法:

https://blog.csdn.net/qq_34277608/article/details/87884021

(2)工具箱readme文件

mstar_conv_tools\mstar2jpeg

2. Ubantu使用

2.1 常见问题解决

ubantu系统下报错:

#include “/usr/include/jpeglib.h”

解决方法1:

sudo apt-get install libjpeg-dev

解决方法2:(可以解决后续问题)

1 :configure: error: jpeglib.h not found.
解决如下:
在终端依次输入

rpm -qa | grep libjpeg
yum -y install libjpeg-devel
yum list installed | grep libjpeg
rpm -ql libjpeg-turbo

再次编译即可

2.2 结果展示

官方数据库给的结果

128*128,3.56 KB (3,650 字节)

MSTAR数据集处理_第1张图片

./mstar2jpeg -i HB03333.003 -o HB03333-1.jpg

MSTAR数据集处理_第2张图片

./mstar2jpeg -i HB03333.003 -o HB03333-2-1.jpg [-e]

MSTAR数据集处理_第3张图片

./mstar2jpeg -i HB03333.003 -o HB03333-2-1.jpg -e

4.97 KB (5,092 字节)

MSTAR数据集处理_第4张图片

./mstar2jpeg -i HB03333.003 -o HB03333-3-1.jpg -e -q 95

10.4 KB (10,735 字节)

MSTAR数据集处理_第5张图片

./mstar2jpeg -i HB03333.003 -o HB03333-3-2.jpg -e -q 5

765 字节 (765 字节)

MSTAR数据集处理_第6张图片

./mstar2jpeg -i HB03333.003 -o HB03333-3-3.jpg  -q 95

MSTAR数据集处理_第7张图片

./mstar2jpeg -i HB03333.003 -o HB03333-4-1.jpg  -e -h

会产生头文件说明,其他无不同。

./mstar2jpeg -i HB03333.003 -o HB03333-5.jpg  -e -v

会产生以下提示说明,其他无不同

MSTAR to JPEG conversion: started!
Determining input image/hdr information...
==> MSTAR target chip image detected...
==> Little-Endian CPU detected: Will byteswap before scaling data!
Reading MSTAR Chip magnitude data...
Performing auto-byteswap...
Scaling MSTAR Chip magnitude data to 8-bit...
Contrast-Adjusting 8-bit data..
Setting up JPEG parameters....1

3.Matlab 复原

Maltab代码是当时合作的大佬同学基于linux代码重构的,基本逻辑比较简单,但是这里公开让大家欣赏一下。

% 这个程序可以把MSTAR车辆目标文件转为jpg,但是大场景图像数据格式不同,要稍微改一改
% MSTAR车辆目标文件前1606字节是头文件信息,记录了文件名、图像长宽等数据
% 后面131072=128*128*4*2字节是幅度+相位信息(所以*2),对应128*128个像素,每个像素值为占据4个字节的浮点数

function mstar2jpg()
    clc;clear;
    
    f3 = fopen('HB03333.003','r');              % 以只读方式打开二进制文件HB03333.003
    answer3 = fread(f3);                        % 数据读入answer3
    
    answer4 = answer3( 1607:132678 );           % 前1606字节是文件头,我们不需要 1607 + 131072 
    fid = fopen('临时文件HB03333.003', 'wb');   % 将出文件头外的所有数据写入临时文件HB03333.003
    fwrite(fid, answer4);
    
    f = fopen('临时文件HB03333.003', 'r');       % 以只读方式打开二进制文件 '临时文件HB03333.004'
    amplitude = fread(f,[128*128,1], '*float', 'ieee-be.l64');% 数据读入amplitude
    % HB03333.004一共131072字节,每4个字节表示一个浮点数(float)
    % 所以一共有32768=128*128*2个浮点数,其中前128*128个浮点数表示幅度,后128*128个表示相位
    % 这里只读取幅度信息,所以amplitude为(128*128,1)的向量
    fclose(f3);fclose(f);
    
    % 下面是幅度值转灰度值的线性变换,最大幅度对应灰度值255,最小幅度对应灰度值0
    max_pixel = max(amplitude);                   % 图像中最大的幅度值
    min_pixel = min(amplitude);                   % 图像中最小的幅度值
    pixel_range = max_pixel - min_pixel;
    pixel_scale = 255.0 / pixel_range;            % 变换比例
    amplitude1=amplitude;amplitude2=amplitude;amplitude3=amplitude;
    for i = 1 : 128*128
        amplitude1(i) = amplitude(i) - min_pixel;
        amplitude2(i) = amplitude1(i) * pixel_scale;
        amplitude3(i) = round(amplitude2(i)+0.5);  
    end
    pic = amplitude3;
    
    I = reshape( pic, 128, 128 );                 % 向量转矩阵
    I = mat2gray( I');                            % 矩阵转灰度图
    imwrite(I, 'HB03333.jpg');
    figure('name','灰度增强前的图像'); imshow(I)%显示图像
    
    enhanced_img = enhancement(pic);%灰度增强
    enI = reshape(enhanced_img, 128, 128);%向量转矩阵
    enI = mat2gray(enI');%矩阵转灰度图
    imwrite(enI, 'enHB03333.jpg');
    figure('name','灰度增强后的图像'); imshow(enI)%显示灰度增强后的图像
end

%灰度增强函数
function enhanced_img = enhancement(img)
% 统计图像中出现次数最多和最少的灰度值(max_count和min_count)
% 如果min_count>max_count
%     灰度 = 原灰度 * 255 /(min_count - max_count)
% 否则
%     灰度 = 原灰度*3
% 大于255的灰度记为255
    pixel_count = zeros(256,1);
    for i=1:255
        pixel_count(i) = sum(img==i);%统计图像中灰度i出现的次数
    end
    [~,max_count] = max(pixel_count); % 灰度i出现的次数最大值的下标,即此时的i
    [~,min_count] = min(pixel_count); % 灰度i出现的次数最小值的下标,即此时的i
    if min_count > max_count
        threshVal = min_count - max_count;
        img = 255.0 /threshVal*img;   % 灰度 = 原灰度 * 255/threshVal
    else
        img = 3*img;                  % 灰度 = 原灰度 * 3
    end
    img(img > 255) = 255;             % 大于255的灰度记为255
    img(img < 255) = img(img < 255) + 0.5;
    enhanced_img = round(img);
end

MSTAR数据集处理_第8张图片

你可能感兴趣的:(人工智能,高效工具,matlab,python,算法)