采样与量化

1. 采样
图像采样与量化
%采样:就是把每一个连续图像在空间是分割成M*N个网格,每个网格用一亮度值来表示。
%量化:把采样点上对应的亮度连续变化区间转换为单个特定数码的过程。
我的理解:采样就是选取某些点的值作为附件几个点的值,象征性代表。或者选择性删除一些值,一般都是隔一行或者隔一列删除一个元素。
量化:就是将原有的灰度级,重新划分为几个区间,在某个区间的就取对应的灰度级。而histeq是用了概率论的知识进行的均衡化。
源码:
I1 = imread(‘E:\photo\matlabtest\testone.jpg’); %读取grb格式的图像
I1 = rgb2gray(I1); %变为灰度图像
I2=I1(1:2:end,1:2:end); %每隔一行重新采样一个点和每隔一列重新采样一个点
I3=I1(1:4:end,1:4:end); %每隔4行重新采样一个点和每隔4列重新采样一个点
I4=I1(1:8:end,1:8:end); %每隔8行重新采样一个点和每隔8列重新采样一个点
I5=I1(1:16:end,1:16:end); %每隔8行重新采样一个点和每隔8列重新采样一个点
I6=I1(1:32:end,1:32:end); %每隔16行重新采样一个点和每隔16列重新采样一个点
figure();
subplot(2,3,1),imshow(I1),title(‘1440x2560’); %画图,展示,标题
subplot(2,3,2),imshow(I2),title(‘720x1280’);
subplot(2,3,3),imshow(I3),title(‘360x640’);
subplot(2,3,4),imshow(I4),title(‘180x320’);
subplot(2,3,5),imshow(I5),title(‘90x160’);
subplot(2,3,6),imshow(I6),title(‘45x80’);
结果:
采样与量化_第1张图片

上面分别是隔一行,4行,8行,16行,以及对应的这么多列选择保留一个元素。隔的行数和列数越多,则画质越不清晰,马赛克的形成就是对应的这个道理。

2. 量化(用histeq函数实现)
源码:

I1 = imread(‘E:\photo\matlabtest\testone.jpg’); %读取grb格式的图像
I1 = rgb2gray(I1); %变为灰度图像
I64=histeq(I1,64); %一般图像为256分辨率的图像,这里设置为64,下面类似
I32=histeq(I1,32);
I16=histeq(I1,16);
I8=histeq(I1,8);
I4=histeq(I1,4);
I2=histeq(I1,2);
figure();
subplot(2,3,1),imshow(I64),title(‘64x64’); %画图,展示,标题
subplot(2,3,2),imshow(I32),title(‘32x32’);
subplot(2,3,3),imshow(I16),title(‘16x16’);
subplot(2,3,4),imshow(I8),title(‘8x8’);
subplot(2,3,5),imshow(I4),title(‘4x4’);
subplot(2,3,6),imshow(I2),title(‘2x2’);

结果:
采样与量化_第2张图片

3. 手写一个四倍降采样
%手写采样与量化,先用另外一种方式采样,每隔一行一列删掉一个
I1 = imread(‘E:\photo\matlabtest\testone.jpg’); %读取grb格式的图像
I1 = rgb2gray(I1); %变为灰度图像
[width,height]=size(I1); %得到尺寸
I4 = zeros(width/2+1,height/2+1); %开辟新的空间
I4=uint8(I4); %没这句话就是白色的
i1=1;
for i=1:2:width %循环遍历
j1=1;
for j=1:2:height
I4(i1,j1)=I1(i,j); %赋值

    j1=j1+1;   %J+1
end
i1=i1+1;   %行数加一

end
figure();
subplot(1,2,1),imshow(I1),title(“1440x2560”); %画图
subplot(1,2,2),imshow(I4),title(“360x640”);
结果:
采样与量化_第3张图片

4.用均值进行采样(就是将附近的四个格子取平均值)
源码:

%用均值进行采样
clear; %清除变量
clc; %清空命令行
close all; %关闭工作空间
I1 = imread(‘E:\photo\matlabtest\testone.jpg’); %读取grb格式的图像
I1 = rgb2gray(I1); %变为灰度图像
[width,height]=size(I1); %得到尺寸大小
I4 = zeros(width/2+1,height/2+1); %开辟空间
I4=uint8(I4); %把double类型变为uint8
i1=1;
for i=1:2:width %遍历行
j1=1;
for j=1:2:height %遍历列
sum = (I1(i,j)/4+I1(i,j+1)/4+I1(i+1,j)/4+I1(i+1,j+1)/4); %取均值
I4(i1,j1)=sum; %赋值
j1=j1+1; %列加一
end
i1=i1+1; %行加一
end
figure();
subplot(1,2,1),imshow(I1),title(“1440x2560”);
subplot(1,2,2),imshow(I4),title(“360x640”);

结果:
采样与量化_第4张图片

5.手写量化
%改变灰度级

为了改变灰度级,所以先整除对应的数字,如果为k阶,则表达式为f(I,j)/(k-1),此时都为小于k的值,然后都乘以(k-1)进行扩充,到此完成,查看直方图就可以看到只有一些零散的值。
clear;
clc;
close all;
I1 = imread(‘E:\photo\matlabtest\testone.jpg’); %读取grb格式的图像
I1 = rgb2gray(I1); %变为灰度图像

[width,height]=size(I1); %得到尺寸
I2=zeros(width,height); %生成全零矩阵
I2=uint8(I2); %类型变换
i1=1;
for i=1:width
for j=1:height
I2(i,j) = fix(I1(i,j)/31)*31; %fix,下取整
end
end

figure();
subplot(2,2,1),imshow(I1),title(“256x256”);
subplot(2,2,2),imhist(I1),title(“原图直方图”);
subplot(2,2,3),imshow(I2),title(“88");
subplot(2,2,4),imhist(I2),title("8
8直方图”);

hist为得到图像的直方图函数,由于直方图里面的值与图像位置无关,所以很是常用。横坐标是对应的灰度级,然后纵坐标是对应灰度级出现的像素的个数。
结果:

采样与量化_第5张图片

你可能感兴趣的:(数字图像处理,matlab,图像处理,计算机视觉)