数字图像处理实验(一)——图像基本变换

数字图像处理实验(一)——图像基本变换

实验目的

(1)了解和掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数
(2)理解色彩的概念

实验内容

使用Matlab图像处理函数,对其进行下列变换:
(1)调用matlab函数imread和imshow 打开并显示一幅彩色图像Image1,;
(2)将Image1色彩通道互换,并显示效果;
(3)将Image1灰度化为gray,并显示灰度化后图像;
(4)将Subplot:将当前图像分成若干个子图像进行显示;
(5)采用不同的插值方法实现gray的旋转、放大变换;
(6)编写程序实现习题中的灰度级变换。
(试给出把灰度范围[0,10]伸长为[0,15],把范围[10,20]移到[15,25],并把范围[20,30]压缩为[25,30]的变换方程)

实验环境

MATLAB R2023a

Matlab相关函数介绍

(1)imread函数
功能:读取图像文件
调用格式:A = imread(filename, fmt)
filename为图像文件名,fmt为文件的扩展名。若文件不在当前目录或不在Matlab目录下,则需要列全文件路径。

(2)imshow函数
功能:显示图像。
调用格式:
imshow(I,n):显示灰度图像I,n为要显示图像的灰度等级,整数,默认为256。
Imshow(I,[LOW HIGH]):以规定的灰度级范围[LOW HIGH]来显示灰度图像I,低于 LOW值的显示为黑,高于HIGH值的显示为白,默认按256个灰度级显示。
imshow(RGB):显示真彩色图像RGB。
imshow(BW):显示二值图像BW。
imshow(X,map):显示索引图像,X为索引图像的数据矩阵,map为其颜色映射表。
imshow filename:显示filename指定的图像,若文件包括多帧图像,则显示第一幅,且文件必须在MATLAB的当前目录下。

(3)imwrite函数
功能:保存图像文件
调用格式:
imwrite(A,’filename’,fmt):A是要保存的图像数据矩阵,filename是文件名,fmt是文件格式。
imwrite(X,map,’filename’,fmt):X为索引图像的数据矩阵,map为其颜色映射表。

(4)rgb2hsv函数
功能:实现RGB数据图像向HSV数据图像的转换。
调用格式:
HSV = rgb2hsv(RGB)
RGB为RGB彩色图像,为3维矩阵;HSV为3维HSV图像矩阵,3维依次为H、S、V,取值均在[0,1]范围内。

(5)rgb2ycbcr函数
功能:实现RGB数据图像向YCbCr数据图像的转换。
调用格式:YCBCR = rgb2ycbcr(RGB)

(6)rgb2gray函数
功能:彩色图像灰度化
调用格式:
I = rgb2gray(RGB):真彩色RGB图像变换为灰度图像I。
NEWMAP = rgb2gray(MAP):变换索引图像的调色板为灰度调色板。

(7)imrotate函数
功能:实现图像旋转
调用格式:
B = imrotate(A,ANGLE,METHOD,BBOX)
A为要进行旋转的图像;ANGLE为要旋转的角度,逆时针为正,顺时针为负;METHOD为图像旋转插值方法,可取“‘nearest’, ‘bilinear’, ‘bicubic’”,默认为nearest;BBOX指定返回图像大小,可取“crop”,输出图像B与输入图像A具有相同的大小,对旋转图像进行剪切以满足要求;可取“loose”,默认是,B包含整个旋转后的图像。

(8)imresize函数
功能:实现图像缩放。
调用格式:
B = imresize(A, SCALE,METHOD)):返回原图A的SCALE倍大小图像B;
B = imresize(A, [NUMROWS NUMCOLS], METHOD)):对原图A进行比例缩放,返回图像B的行数NUMROWS和列数NUMCOLS,如果二者为NaN,表明Matlab自动调整了图像的缩放比例;
[Y, NEWMAP] = imresize(X, MAP, SCALE, METHOD)):对索引图像进行成比例缩放。

(9)imtransform函数
功能:实现图像几何变换。
调用格式:
B = imtransform(A,TFORM,INTERP,param1,val1,param2,val2,…) :对图像A实现空间变换,TFORM为maketform函数或cp2tform函数产生的结构;INTERP为插值方法,可取“‘nearest’, ‘bilinear’, ‘bicubic’”。
T = maketform(TRANSFORMTYPE,…):产生转换结构;TRANSFORMTYPE为变换类型,可以为“‘affine’, ‘projective’, ‘custom’, ‘box’, ‘composite’”。

(10)fliplr函数
功能:实现二维矩阵X沿垂直轴的左右翻转。
调用格式:B=fliplr(X)

(11)flipud函数
功能:实现二维矩阵X上下翻转。
调用格式:B= flipud(X)

(12)flipdim函数
功能:使矩阵X按特定轴翻转
调用格式:B=flipdim(X,DIM),dim指定翻转方式:为1表示按行翻转;为2表示按列翻转。

(13)permute函数
功能:按照向量ORDER指定的顺序重排A的各维
调用格式:B = permute(A,ORDER),B中元素和A中元素完全相同,但在A、B访问同一个元素使用的下标不一样。order中的元素必须各不相同。

(14)imadd函数
功能:实现两幅图像相加。
调用格式:C=imadd(A,B)
1)A、B均为图像,则要求B和A的尺寸相等;若B是一个标量,则C表示对图像A整体加上某个值(对小数部分取整)。
2)假如A和B对应运算和大于255,C仍取255,即截断处理;为避免截断,可以将C存储为uint16,即C=imadd(A,B,’uint16’)。

(15)imsubtract函数
功能:实现两幅图像相减。
调用格式:
C=imsubtract(A,B):差值结果小于0的赋值为0,对A、B的要求同imadd相同。
C=imabsdiff(A,B):差值结果取绝对值。

(16)immultiply 函数
功能:实现两幅图像相乘。
调用格式:C=immultiply(A,B)

(17)imdivide函数
功能:实现两幅图像相除。
调用格式:C=imdivide(A,B)

实验结果

(1)打开一幅图像

Image1=imread('image1.jpg');%图像已在Matlab目录下
imshow(Image1);
imwrite(Image1,'Image1.jpg');%保存图像

(2)色彩通道互换

subplot(121);imshow(Image1);%显示原图像
Image2=Image1;%创建图像副本,复制图像数据
%红色通道的索引是1,绿色通道的索引是2,蓝色通道的索引是3
%红蓝通道互换
Image2(:,:,1)=Image1(:,:,3);
Image2(:,:,3)=Image1(:,:,1);
subplot(122);imshow(Image2);%显示变换后的图像

结果:
在这里插入图片描述
(3)灰度化彩色图像
利用rgb2gray函数

%灰度化
figure;
subplot(121);imshow(Image1);%显示原图像
gray=rgb2gray(Image1);%灰度化
subplot(122);imshow(gray);
imwrite(gray,'gray.jpg');%保存图像

结果:
在这里插入图片描述
(4)图像旋转
利用imrotate函数实现图像的旋转,本次对灰度图像进行旋转

 %图像旋转
Newgray1=imrotate(gray,15);%逆时针旋转15°,图像旋转插值方法默认为nearest
Newgray2=imrotate(gray,15,'bilinear');%逆时针旋转15°
Newgray3=imrotate(gray,-15);%顺时针旋转15°,图像旋转插值方法默认为nearest
Newgray4=imrotate(gray,-15,"crop");%顺时针旋转15°,输出图像与输入图像具有相同的大小
figure;
subplot(221),imshow(Newgray1),title('旋转15°(最邻近插值)');
subplot(222),imshow(Newgray2),title('旋转15°(双线性插值)');
subplot(223),imshow(Newgray3),title('旋转-15°(最邻近插值)');
subplot(224),imshow(Newgray4),title('旋转-15°(最邻近插值)');

结果:
在这里插入图片描述
(5)图像缩放
利用imresize函数

%图像缩放
grayNew1=imresize(gray,3,"nearest");%放大3倍
grayNew2=imresize(gray,3,'bilinear');%放大3倍
subplot(121),imshow(grayNew1),title('放大3倍(最邻近插值)');
subplot(122),imshow(grayNew2),title('放大3倍(双线,性插值)');

结果:
在这里插入图片描述
(6)灰度级变换习题

clc;
clear all;
close all;
% 读取灰度图像  
Image=imread('Image1.jpg');
%若为彩色图像,转换为灰度图像 
if size(Image,3)==3  
   Image=rgb2gray(Image);  
end  
% 应用灰度变换  
transformed_image=grayscale_transform(Image);  
% 显示原始和变换后的图像  
figure;  
subplot(1,2,1);  
imshow(Image);  
title('Image'); 
subplot(1,2,2);  
imshow(transformed_image);  
title('Transformed Image');  

%定义函数
function transformed_image=grayscale_transform(Image)  
    % 将输入图像转换为双精度类型  
    image_double = im2double(Image);   
    % 初始化输出图像  
    transformed_image = zeros(size(image_double));  
    % 遍历图像的每个像素  
    [rows, cols] = size(image_double);  
    for i=1:rows  
        for j=1:cols  
            pixel_value = image_double(i, j); 
            % 应用灰度变换  
            if pixel_value <= 10/255  
                transformed_image(i, j) = pixel_value * (15/10);% 灰度范围[0,10]伸长为[0,15]    
            elseif pixel_value <= 20/255  
                transformed_image(i, j) = (pixel_value - 10/255) * ((25 - 15) / (20 - 10)) + 15/255;% 灰度范围[10,20]移到[15,25]    
            else  
                transformed_image(i, j) = (pixel_value - 20/255) * ((30 - 25) / (30 - 20)) + 25/255;% 灰度范围[20,30]压缩为[25,30]    
            end  
        end  
    end  
    % 将变换后的图像数据转换回uint8类型  
    transformed_image = uint8(round(transformed_image * 255));  
end  
  

结果:
在这里插入图片描述

  • 23
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值