数字图像处理学习笔记2

本文详细介绍了在Matlab中使用内置函数进行图像平移(translate和imtranslate)、旋转(imrotate)、缩放(imresize)以及RGB通道处理(imsplit)的方法。通过实例展示了如何使用这些函数操作图像并保持或改变图像的尺寸和色彩特性。
摘要由CSDN通过智能技术生成

#1 图像平移,由于课程使用的是自己编写的函数,库里没有,所以使用matlab中的函数进行实验

%图像平移函数,这里使用matlab自带的来做实验,课程中的move.m是老师自己编写的,库中没有
A=imread('corn.bmp');
se=translate(strel(1),[50 50]);%strel对象表示一个平面形态学结构元素
%向右向下平移50,50像素坐标
B=imdilate(A,se);%形态学膨胀
figure;
subplot(1,2,1),imshow(A),title('原图像');
subplot(1,2,2),imshow(B),title('图像平移');

由于画布尺寸等于图像尺寸,所以只要对图像进行平移,就一定会有一部分超出画布。

代码中使用了三个新函数,分别是strel(),translate(),imdilate()。

首先是strel(),全称structure element,运用各种形状和大小构造元素,单独运行se=strel(1),结果如下

se=strel(1)

一般来说,strel()函数中,需要指明两个参数,一个是形状,一个是大小,该例中没有规定形状,直接规定了大小,即默认的任意形状,大小为1。后续再学习另外两个函数,因为存在更简便的平移函数imtranslate()

%图像平移函数,相对更简单的imtranslate()
A=imread('corn.bmp');
B=imtranslate(A,[50,50]);
subplot(1,2,1),imshow(A),title('原图像');
subplot(1,2,2),imshow(B),title('图像平移');

只需填入平移的r,c方向距离即可。

#2 使用imrotate()函数对图像进行旋转,可以选择插值方式

%图像旋转,matlab库函数版 https://blog.csdn.net/qq_35888055/article/details/105297547
A=imread('tax.png');
B=imrotate(A,30);                 %旋转30°
C=imrotate(A,30,'crop');       %旋转30°,并剪切图像,使得到的图像和原图像大小一致
%若不说明插值方法,默认为最近邻插值
D=imrotate(A,30,'bilinear','crop');
%双线性插值法旋转30°,并剪切图像,使得到的图像和原图像大小一致

figure;
subplot(2,2,1),imshow(A);
title('原图像')
subplot(2,2,2),imshow(B);
title('图像旋转(保留全部图像信息)')
subplot(2,2,3),imshow(C);
title('图像旋转(大小不变)')
subplot(2,2,4),imshow(D);
title('图像旋转(双线性插值)')

#3 使用imresize()函数对图像进行缩放

A = imread('1.jpg');
a = 2; 
aa = 0.5;
B=imresize(A,a,'nearest');
C=imresize(A,aa,'nearest');
figure;
imshow(A);
title('原图像')
figure;
imshow(B);
title('放大2倍图像')
figure;
imshow(C);
title('放大0.5倍图像')



#4 使用imcrop()函数进行图像剪裁

%使用imcrop()函数进行图像剪裁
A=imread('tax.png');  %读入图像
rect = [300 20 400 150];%设置一个用于确定剪切起始坐标和长、宽的数组
B=imcrop(A,rect);%进行图像剪切
subplot(121),imshow(A); 
title('原图像')
rectangle('Position',rect,'LineWidth',2,'EdgeColor','r') %显示图像剪切区域
%rectangle函数可以在图片中显示一个框,可以定义框的形状、颜色、位置、线宽等参数
%最基础的参数就是pos,也就是rectangle('Positon',pos),pos是一个四元素的向量,
%[x y w h],用于确定位置和宽高
subplot(122),imshow(B);   
title('裁剪图像')

#5 对RGB三通道分别提取的实验

%使用imsplit()函数来分离RGB三个通道的图像
A=imread('tax.png');  %读入图像
[R,G,B]=imsplit(A);
figure,
subplot(1,3,1),imshow(R),title('Red')
subplot(1,3,2),imshow(G),title('Green')
subplot(1,3,3),imshow(B),title('Blue')
%使用这个方法,RGB三个通道最终显示的都是灰度图像,因为这个函数相当于把有RGB三个
%通道的24位图像变成了只有8位的图像,只具有灰度特征
Real_R=A;
Real_R(:,:,2)=0;Real_R(:,:,3)=0;%使用这种方法将GB通道信息变为0,但是仍然保留GB
%两个通道,这样原图就变成了只有R通道8位有效信息的24位图像,显示时就是彩色图片,
%但是只能显示出红色
Real_G=A;
Real_G(:,:,1)=0;Real_G(:,:,3)=0;
Real_B=A;
Real_B(:,:,1)=0;Real_B(:,:,2)=0;
figure,
subplot(1,3,1),imshow(Real_R),title('Red')
subplot(1,3,2),imshow(Real_G),title('Green')
subplot(1,3,3),imshow(Real_B),title('Blue')

如果使用imsplit()函数来分别提取RGB三个通道,那么会得到三幅灰度图像,如下图所示

原因是imsplit()函数相当于将原本24位三通道的彩色图像单独提取其中的一个通道,也就是8位,这就使得图像变成了8位灰度图像,无论哪一个通道,得到的都是灰度图像,如果希望得到单独显示RGB三个通道中一个通道的彩色图像,则需要使用下半部分的代码,其原理是仍然保留原本图像24位的特点,只是将除了目标通道以外的16位,两个通道中的数据变成0,这样最终得到的就是只有一个通道有效信息的24位彩色图像,运行效果如下图所示。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值