资源简介
对于颜色不太丰富的彩色图像来说,用 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
- 上一篇:BPSK调制解调MATLAB程序
- 下一篇:copula函数
相关资源
- 数字图像报告-图像空间域平滑的几种
- 图像变换 二维离散傅里叶变换
- 数字图像处理图像分割matlab算法代码
- 数字图像处理作业冈萨雷斯版源码M
- 数字图像处理MATLAB2015版 源代码
- 冈萨雷斯数字图像处理matlab版.源代码
- Matlab数字图像处理 大作业
- 数字图像处理——基于视频的车流量
- matlab数字图像处理 有约束最小平方恢
- 详解MATLAB数字图像处理
- 数字图像处理文献综述
- matlab对两张彩色图进行直方图匹配并
- Matlab 把灰度图像变成彩色图片 Gray2
- 基于matlab的数字图像处理论文
- 数字图像处理——图像的分割实验
- MATLAB数字图像处理张德丰源代码
- matlab数字图像处理——清华大学出版
- 算术编码matlab
- 数字图像处理第二版MatLab代码大全
- 数字图像处理(第三版)matlab代码 冈
- 冈萨雷斯《数字图像处理matlab版》源
- 数字图像处理系统matlab gui界面.zip
- matlab快速傅里叶变换进行数字图像处
- MATLAB:图像旋转与插值
- 开关型矢量中值滤波器matlab
- 数字图像处理作业
- 数字图像处理维纳滤波Matlab代码分享
- matlab图像边缘检测sobel算子梯度图像
- 数字图像处理matlab源代码
- 阿尔法均值滤波函数
评论
共有 条评论