MATLAB--数字图像处理 图像的收缩

简介: MATLAB--数字图像处理 图像的收缩

图像的收缩

定义
图像的收缩通俗一点就是我们常说的放大、缩写,在数字图像处理中,就是指像素的增加与减少。比如22的图像,有4个像素,放大两倍,那么就有44=16个像素。

那么怎么对图像进行收缩呢?

这里拿放大举例:放大二倍的图像就是图片的width、height都扩大为原来的两倍,也就是像素总数为原来的四倍。那么怎么在保证图片内容不变的情况下增加像素呢?这个也简单,举个例子,比如一个红色的圆原来是4个像素(4个相同的像素)来表示,二倍后的圆那么就是用16个像素(也是相同的)来表示,通俗来说,就是用更多的像素来表示同一种图形。原来需要4个,那么现在就需要16个。

当然,随机图像上面一个片段是由多个不同的像素表示,那么怎么增加像素个数,同时图形还不变化呢?这个就要用插值来计算了。举个例子,一段上坡路,现在要把它增长(在中间增长),那么肯定是在中间填入和两侧差不多的高度,使得原来的坡面同样也是连续的,保持原来的连续性。所以插值的目的是:通过填充像素,保持原图像的一致,和高数上变化后保持连续性相似。下图是插值法的说明:
在这里插入图片描述
在这里插入图片描述
该算法的伪代码:
在这里插入图片描述

我的理解:
比如原图的大小为300400,放大两倍,变成600800;原图上(1,2)的点在放大图的点为(2,4)。这个应该比较好理解。

编程的时候,我们是先构造出放大图像的空矩阵,再依次填值。这就要求我们要能够在已知知道放大图像中的一个点坐标,计算出原图的坐标,然后把原图的坐标赋值给新点。

这里运用比例思想,比如x轴上,放大图为2,它占总长600的2/600,那么原图的x坐标同样也占x轴的2/600,计算出来为1.
假设(x1,y1)为放大图像的值,(x0,y0)为原图的值,m,n为原图的横纵长度,rm,rn为放大图的横纵长度。

有以下关系:

x1/rm=x0/m y1/rn=y0/n

可以推导出:

x0=x1m/rm y0=y1n/rn

最后再利用双线性插值法插值即可。
这里代码是(其实就是先分别求出周围4个点,利用不同的取值函数就行,再计算):

rt(i,j,:)=t(floor(x),floor(y),:)*(1-u)*(1-v)+t(floor(x),ceil(y),:)*(1-u)*v+t(ceil(x),ceil(y),:)*(u)*(1-v)+t(ceil(x),ceil(y),:)*u*v;

全部代码:

 t=imread('a1.jpg');
[m,n,dep]=size(t);
%自定义长 宽 
rm=1400;
rn=822;

%构造新矩阵 存储收缩后的图片
rt=zeros(rm,rn,dep);

for i=1:rm
for j=1:rn
%坐标转换
x=i*m/rm;
y=j*n/rn;
%求出偏移量
u=x-floor(x);
v=y-floor(y);
%边缘处理
if x<1
x=1;
end
if y<1
y=1;
end
%双线性插值
rt(i,j,:)=t(floor(x),floor(y),:)*(1-u)*(1-v)+t(floor(x),ceil(y),:)*(1-u)*v+t(ceil(x),ceil(y),:)*(u)*(1-v)+t(ceil(x),ceil(y),:)*u*v;
end
end


imshow(t);title('原图');
figure;imshow(uint8(rt));title('加倍后的图片');
目录
相关文章
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
276 0
|
3月前
|
机器学习/深度学习 编解码 并行计算
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
【改进引导滤波器】各向异性引导滤波器,利用加权平均来实现最大扩散,同时保持图像中的强边缘,实现强各向异性滤波,同时保持原始引导滤波器的低低计算成本(Matlab代码实现)
221 8
|
2月前
|
算法 定位技术 计算机视觉
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
【水下图像增强】基于波长补偿与去雾的水下图像增强研究(Matlab代码实现)
132 0
|
2月前
|
算法 机器人 计算机视觉
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
【图像处理】水下图像增强的颜色平衡与融合技术研究(Matlab代码实现)
118 0
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
189 8
|
3月前
|
机器学习/深度学习 算法 安全
【图像处理】使用四树分割和直方图移动的可逆图像数据隐藏(Matlab代码实现)
【图像处理】使用四树分割和直方图移动的可逆图像数据隐藏(Matlab代码实现)
182 2
|
3月前
|
机器学习/深度学习 编解码 算法
【图像处理】图像的边缘检测(Matlab代码实现)
【图像处理】图像的边缘检测(Matlab代码实现)
252 1
|
2月前
|
新能源 Java Go
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
【EI复现】参与调峰的储能系统配置方案及经济性分析(Matlab代码实现)
133 0
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
178 8
|
2月前
|
机器学习/深度学习 编解码 算法
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
基于OFDM技术的水下声学通信多径信道图像传输研究(Matlab代码实现)
173 8

热门文章

最新文章