• 大小: 3KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: Matlab
  • 标签: matlab  

资源简介

对于颜色不太丰富的彩色图像来说,用 24 位存储真彩色存在一定的浪费。如果 24 位彩色转成 256 色图像,则可以将数据压缩到原来的 1/3。但是,压缩的过程中可能存在失真。因此,保持颜色最小失真的情况下,选择保留主要颜色,去除非主要的颜色是压缩算法的重 点。-

资源截图

代码片段和文件信息

function [IImap]=Truergbto256(Filen)
%% -----------------------------------------------
%  EXPLAIN: 24位RGB真彩色图像转256色图像程序
%  
%  INPUT: File:图像文件名
%         n:数据预处理时的参数,即舍弃原数据低位的位数
%        
%  OUTPUT: II: 转换后的图像数据,
%          map:256色图像的调色板
%          并转换后得到的256色图像写入文件
%
%  AUTHOR:Yang Hao
%  DATE: 2019/5/8
%% -----------------------------------------------

%tic  %计时
img=imread(File);
[MNdim]=size(img);
if dim~=3 || ~isa(img‘uint8‘) % 输入文件不是24位真彩色图像则报错并结束程序 
    error(‘Error!!! Please enter the correct 24-bit true color image‘);
end
Iold=img;%保存原数据,方便后续计算

%% 数据预处理
img=floor(double(img)/2^n);%舍弃低位n位数据
% 分别读取R、G、B值
R=img(::1);
G=img(::2);
B=img(::3);
% 将R、G、B整合为一个唯一整数数组,一个整数唯一代表了一种颜色
color=(double(R)*10^4+double(G)*10^2+double(B));

sta = tabulate(color(:))‘;%统计各个整数符号的概率
sta(:find(sta(2:)==0))=[];%删除概率为0的列
symb = sta(1:);% 所有出现整数符号数组,
freq = sta(3:);% 所有出现整数符号的概率数组,

%% 调色板创建
[~sortindex] = sort(freq‘descend‘);%概率数组有高到底排序
symb = symb(sortindex)‘; %按概率排序的符号
if length(symb)>256 % 若原图像颜色小于256种,则全部颜色作为调色板颜色,否则取概率前256种颜色
    symb = symb(1:256);
end

% 恢复整数代表的唯一颜色,三个分量分别存储为r、g、b
r=floor(symb/10000);
g=floor(mod(symb10000)/100);
b=floor(mod(symb100

评论

共有 条评论