MATLAB图像处理入门

这篇具有很好参考价值的文章主要介绍了MATLAB图像处理入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、读写图像、直方图 

1、读取并显示图像

imread与imshow函数

clc;clear; close all;
I = imread('pout.tif');
imshow(I);

结果:

MATLAB图像处理入门

如果我们想显示图像坐标轴的话只需在imshow后加上下面这行代码:

set(gca,'Visible','on');

MATLAB图像处理入门

 我们还可以用whos命令查看图像的信息:

在命令行窗口输入whos I查看上面那种图片的信息:

MATLAB图像处理入门

 2、直方图

显示图像的直方图用hist函数,将直方图均衡化用histeq函数

我们在上述代码基础上继续输入下面代码:

figure();
imhist(I);

结果:

MATLAB图像处理入门

 可以看到图像的对比度比较低,我们进行直方图均衡,继续输入下面代码:

I2 = histeq(I);
imshow(I2);
figure();
imhist(I2);

结果: 

MATLAB图像处理入门

 3、写入图像

我们使用imwrite函数将上述均衡化的图像I2写入磁盘:

imwrite(I2, 'output.png');

可以看到左侧文件区多了output.png

我们在命令行窗口使用imfinfo函数能看见该图片更为详细的信息:

MATLAB图像处理入门

 拓展:

使用montage函数能一次显示多张图片在一个窗口,并且这些图像不需要是同一尺寸和大小,我们只需要将在当前目录下或已经在matlab路径里的图片的名字放在一个字典里:

运行下面代码:

clc;clear; close all;
files = {'catdog.jpg', 'jiedao.jfif', 'Fig0638(a)(lenna_RGB).tif', 'output.png', 'Fig0335(a)(ckt_board_saltpep_prob_pt05).tif'};
montage(files)

结果:

MATLAB图像处理入门

 我们甚至可以看到不是同一类型的(灰度图和RGB图)都能一起展示!

二、图像类型转换:

在MATLAB的官方文档里有着这么几个图像类型转换的函数:

MATLAB图像处理入门

 我们选择几个常用的讲解:

1、img2gray将 RGB 图像转换为灰度图像

代码:

clc;clear; close all;
RGB = imread('example.tif');
figure;
imshow(RGB);
I = im2gray(RGB);
figure;
imshow(I);

结果:

MATLAB图像处理入门

im2gray 函数与 rgb2gray 基本相同,不同之处是它可以接受灰度图像作为输入并原样返回它们。如果输入图像是灰度图像,则 rgb2gray 函数返回错误。

2、mat2gray将矩阵转换为灰度图像 

MATLAB图像处理入门

 代码:

clc;clear; close all;
mat = [0:255]' * ones(1,256);
mat = mat';
img = mat2gray(mat);
imshow(img);

结果:

MATLAB图像处理入门

 3、imsplit将多通道图像分割成其独立的通道

代码:

clc;clear; close all;
I = imread('peppers.png');
imshow(I);
[r,g,b] = imsplit(I);
montage({r,g,b},'Size',[1 3]);

结果:

MATLAB图像处理入门

4、rgb2hsv将RGB图像转为HSV图像 

代码:

clc;clear; close all;
rgbImage = imread('peppers.png');
imshow(rgbImage);
hsvImage = rgb2hsv(rgbImage);
[h,s,v] = imsplit(hsvImage);
montage({h,s,v},'Size',[1 3])

结果:

MATLAB图像处理入门

还有很多颜色空间之间的转换就不一一列举了:

MATLAB图像处理入门

 5、灰度图像二值化

MATLAB图像处理入门

这里就不演示了

6、数据类型转换

MATLAB图像处理入门 其实这些都可以直接转换,比如我们想将uint16的矩阵I转换为uint8直接I = uint8(I)即可,其他数据类型转换也是同理!

示例:

MATLAB图像处理入门

三、几何变换和图像配准

常见几何变换

MATLAB图像处理入门

1、imcrop裁剪图像 

Icropped = imcrop(I,rect)裁剪图像

clc;clear; close all;
I = imread('circuit.tif');
I2 = imcrop(I,[75 68 130 112]);
axis image;
subplot(1,2,1);
imshow(I);
title('Original Image');
subplot(1,2,2);
imshow(I2);
title('Cropped Image');
axis image;

结果:

MATLAB图像处理入门

 注意matlab的图像坐标系为:

MATLAB图像处理入门

使用空间参照矩形使裁剪图像居中

I = imread('parkavenue.jpg');
imshow(I)

MATLAB图像处理入门

将目标窗口大小指定为 [宽度高度] 形式的二元素向量。

targetSize = [300 600];

 创建指定裁剪窗口的空间范围的 Rectangle 对象。

r = centerCropWindow2d(size(I),targetSize);

在空间范围的界限处裁剪图像。显示裁剪的区域。 

J = imcrop(I,r);
imshow(J)

结果:

MATLAB图像处理入门

 2、imresize调整图像大小

J = imresize(I,scale) 返回图像 J,它是将 I 的长宽大小缩放 scale 倍之后的图像。输入图像 I 可以是灰度图像、RGB 图像、二值图像或分类图像。

代码:

clc;clear; close all;
I = imread('rice.png');
J = imresize(I, 0.5);
figure;
imshow(I);
title('Original Image');
figure;
imshow(J);
title('Resized Image');

结果:

MATLAB图像处理入门

我们都知道图像缩放需要进行插值,我们可以在imresize函数中自行选择插值方法:

MATLAB图像处理入门

我们在下面的代码中指定最近邻插值(其他代码不变):

J = imresize(I, 0.5,'nearest');

MATLAB图像处理入门

J = imresize(I,[numrows numcols]) 返回图像 J,其行数和列数由向量 [numrows numcols] 指定。

代码:

clc;clear; close all;
RGB = imread('peppers.png');
RGB2 = imresize(RGB, [128 128]);
figure;
imshow(RGB);
title('Original Image');
figure;
imshow(RGB2);
title('Resized Image');

结果:

MATLAB图像处理入门

 3、imroate旋转图像

J = imrotate(I,angle) 将图像 I 围绕其中心点逆时针方向旋转 angle 度。要顺时针旋转图像,请为 angle 指定负值。imrotate 使输出图像 J 足够大,可以包含整个旋转图像。默认情况下,imrotate 使用最近邻点插值,将 J 中位于旋转后的图像外的像素的值设置为 0

MATLAB图像处理入门

 代码:
 

clc;clear; close all;
I = imread('peppers.png');
J = imrotate(I, 45, 'bilinear','loose');
figure(1);
imshow(I);
figure(2);
imshow(J);

结果:

MATLAB图像处理入门

 我们将bbox参数改为crop观察图片大小是否一致:

J = imrotate(I, 45, 'bilinear','crop');

 MATLAB图像处理入门

MATLAB图像处理入门

 可以看到改为'crop'后图片大小一致!

 4、图像金字塔impyramid

B = impyramid(A,direction) computes a Gaussian pyramid reduction or expansion of A by one level. direction determines whether impyramid performs a reduction or an expansion.

MATLAB图像处理入门代码:

clc;clear; close all;
I = imread('cameraman.tif');
I1 = impyramid(I, 'reduce');
I2 = impyramid(I1, 'reduce');
I3 = impyramid(I2, 'reduce');
figure, imshow(I);
figure, imshow(I1);
figure, imshow(I2);
figure, imshow(I3);

结果:

MATLAB图像处理入门

四、图像滤波和增强 

1、图像滤波

1.1、fspecial创建滤波器核、imfilter根据选定的滤波核进行滤波

MATLAB图像处理入门

MATLAB图像处理入门

注:图像滤波也可以用filter2函数,与imfilter的区别请自行help命令查看 

MATLAB图像处理入门 注意上面说的imfilter默认使用相关性而不是卷积,若要使用卷积进行滤波则需要指定'conv'参数!

示例:

读取图像并显示:

I = imread('cameraman.tif');
imshow(I);

MATLAB图像处理入门

创建运动滤波器,并使用它来对图像进行模糊处理。显示模糊处理后的图像。 

H = fspecial('motion',20,45);
MotionBlur = imfilter(I,H,'replicate');
imshow(MotionBlur);

MATLAB图像处理入门

 创建圆形滤波器,并使用它来对图像进行模糊处理。显示模糊处理后的图像。

H = fspecial('disk',10);
blurred = imfilter(I,H,'replicate'); 
imshow(blurred);

MATLAB图像处理入门

在执行imfilter时要注意的是将图像转换为uint8型以避免滤波核有负数值导致输出有负数:

MATLAB图像处理入门

 在此要与我们图像之间的运算做区分!我们想把两个图像相加再除2即取均值时我们往往先将两个图像转换为double来防止uint8的截断!而这里则是要刻意使用uint8来截断,注意细节!

1.2、imgaussfilt图像二维高斯滤波

MATLAB图像处理入门

 注意,这里的滤波核大小未给出,经查看源码后,滤波核大小默认为3*3,sigma默认为0.5,如果要自己指定滤波核大小,以第三种键值对的方式给出:

示例: B = imgaussfilt(A,'FilterSize',3);

代码演示:

clc;clear; close all;
I = imread('cameraman.tif');
Iblur = imgaussfilt(I,2, 'FilterSize',7); % sigma = 2, kernel_size = 5*5
montage({I,Iblur});
title('Original Image (Left) Vs. Gaussian Filtered Image (Right)');

MATLAB图像处理入门

 2、对比度调整

MATLAB图像处理入门

同样的,我们选择常用函数进行演示!

2.1、imadjust调整图像强度值

MATLAB图像处理入门

MATLAB图像处理入门

调整灰度图像的对比度

clc;clear; close all;
I = imread('pout.tif');
J = imadjust(I);
montage({I,J});

MATLAB图像处理入门

调整灰度图像的对比度,指定对比度限制 

clc;clear; close all;
I = imread('pout.tif');
K = imadjust(I,[0.3 0.7],[]); %low_out和high_out未给出时默认等于low_in,high_in
montage({I,K});

MATLAB图像处理入门

 调整彩色图像的对比度

clc;clear; close all;
RGB = imread('football.jpg');
RGB2 = imadjust(RGB,[.2 .3 0; .6 .7 1],[]);%对应彩色图像三通道的low_in,high_in
montage({RGB,RGB2});

MATLAB图像处理入门

 2.2、imsharpen图像锐化

MATLAB图像处理入门

MATLAB图像处理入门

 图像锐化

clc;clear; close all;
a = imread('hestain.png');
imshow(a)
title('Original Image');
b = imsharpen(a);
figure, imshow(b)
title('Sharpened Image');

MATLAB图像处理入门

 在边界上控制锐化的数量

clc;clear; close all;
a = imread('rice.png');
imshow(a), title('Original Image');
b = imsharpen(a,'Radius',2,'Amount',1);
figure, imshow(b)
title('Sharpened Image');

MATLAB图像处理入门

2.3、histeq直方图均衡化这个上文提过,这里就不多说了

2.4、imnoise向图像添加噪声

MATLAB图像处理入门

clc;clear; close all;
I = imread('eight.tif');
J = imnoise(I,'salt & pepper',0.02);
montage({I,J});
title('Original Image(left) and Noise Image(right)');

MATLAB图像处理入门

3、形态学运算

MATLAB图像处理入门

3.1、imerode腐蚀 

MATLAB图像处理入门

其中的SE:

MATLAB图像处理入门

original_img = imread('Fig0905(a)(wirebond-mask).tif');
subplot(1,4,1);
imshow(original_img);
%三次不同大小的腐蚀操作比较
SE = strel('rectangle',[11 11]);
out = imerode(original_img, SE);
subplot(1,4,2);
imshow(out);

SE = strel('rectangle',[15 15]);
out = imerode(original_img, SE);
subplot(1,4,3);
imshow(out);

SE = strel('rectangle',[45 45]);
out = imerode(original_img, SE);
subplot(1,4,4);
imshow(out);

注意,每一次腐蚀都会导致中间的白圈变小,这里不大明显! 

MATLAB图像处理入门

 下面我们用nhood再演示一下腐蚀操作:

original_img = imread('Fig0905(a)(wirebond-mask).tif');
subplot(1,2,1);
imshow(original_img);

nhood = ones(45);
out = imerode(original_img, nhood);
subplot(1,2,2);
imshow(out);

MATLAB图像处理入门

 3.2、imdilate膨胀

 和腐蚀的参数差不多!MATLAB图像处理入门

original_img = imread('Fig0907(a)(text_gaps_1_and_2_pixels).tif');
imshow(original_img);

nhood = [0 1 0;1 1 1;0 1 0];
out = imdilate(original_img, nhood);
figure();
imshow(out);

MATLAB图像处理入门

 放大后观察效果:

MATLAB图像处理入门

 3.3、imopen开运算

MATLAB图像处理入门

与腐蚀和膨胀的语法差不多哈

3.4、imclose闭运算 

MATLAB图像处理入门

下面这个示例演示先开运算在闭运算结果

original_img = imread('Fig0911(a)(noisy_fingerprint).tif');
subplot(1,3,1);
imshow(original_img);

nhood = ones(3);
out = imopen(original_img, nhood);
subplot(1,3,2);
imshow(out);

out = imclose(out, nhood);
subplot(1,3,3);
imshow(out);

MATLAB图像处理入门

4、基于关注区域的处理(待更新)

5、图像算术

MATLAB图像处理入门

 5.1、imabsdiff

clc;clear; close all;
I = imread('cameraman.tif');
J = uint8(filter2(fspecial('gaussian'), I));
K = imabsdiff(I,J);
figure;
imshow(K,[]);%将K中像素最小值设为黑色,最大值设为白色

MATLAB图像处理入门

 5.2、imadd

将两个图像相加。将输出指定为 uint16 类型以避免截断结果。

clc;clear; close all;
I = imread('rice.png');
J = imread('cameraman.tif');
K = imadd(I,J,'uint16');
imshow(K,[]);

MATLAB图像处理入门

 5.3、imsubtract

 从一个图像中减去另一个图像或从图像中减去常量

MATLAB图像处理入门

MATLAB图像处理入门

减去图像背景 

clc;clear; close all;
I = imread('rice.png');
%估计背景
background = imopen(I,strel('disk',15));
%从图像中减去背景
J = imsubtract(I,background);
montage({I,J});

MATLAB图像处理入门

五、傅里叶变换 

1、fft2实现图像的快速傅里叶变换

MATLAB图像处理入门

 代码演示:

clc;clear;close all;
im = imread('street.jfif');
figure(1);
imshow(im);
im = rgb2gray(im);
out = fft2(im);
figure(2);
imshow(abs(out),[]); %取实部

MATLAB图像处理入门

可能会有疑问,为什么傅里叶变换黑的啥都没有呢?事实上如果我们将Figure2的左上角放大,其实是这个样子:

MATLAB图像处理入门 所以事实是只有左上角值比较大看起来是白色,而这就是我们的直流分量。事实上这种现象的原因是直接用fft2的话频谱的原点不在图像中心 而在左上角。

如果我们想将原点移到中心,我们需要用fftshift函数:

2、fftshift将频谱原点移到中心

MATLAB图像处理入门

 让我们在上面的代码加上:

figure(3);
out = fftshift(out);
imshow(abs(out),[]);

MATLAB图像处理入门 这样就对了!

3、ifft2进行逆傅里叶变换

下面我们进行频域的低通滤波再逆傅里叶变换查看结果

clc;clear;close all;
im = imread('Fig0638(a)(lenna_RGB).tif');
figure(1);

im = rgb2gray(im);%转灰度
imshow(im);
title('原图');
[M N] = size(im);
im_f = fft2(im);

lp = fspecial('gaussian',25,2);%高斯低通滤波器(空间域)(补零到与原图一样大小)
lp_f = fft2(lp,M,N);%高斯低通滤波器(频域)
figure(2);
surf(fftshift(abs(lp_f)),'edgecolor','none');%surf函数画曲面图
title('滤波核频域曲面图');

out_f = im_f.*lp_f; %频域相乘
out = ifft2(out_f);%空间域结果
figure(3);
imshow(abs(out),[]);
title('结果');


MATLAB图像处理入门

 这里我们的滤波核是用的自带的,当然我们也可以自定义一个频域低通滤波器:

%D(u,v)<=D0时有值
u = 0:Q-1
v = 0:P-1
%calculate D(u,v)
H = double(D<=D0)

参考资料:

MATLAB官方文档的Image Processing Toolbox文章来源地址https://www.toymoban.com/news/detail-471363.html

到了这里,关于MATLAB图像处理入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 我在Vscode学OpenCV 图像处理五(直方图处理)

    直方图是一种统计图,显示了图像中每个灰度级别(或颜色通道)的像素数量。通过分析图像的直方图,可以获得关于图像对比度、亮度和颜色分布等方面的重要信息。 了解图像的对比度、亮度和色彩分布等信息。你可以使用OpenCV中的函数来计算和绘制图像的直方图,从而进

    2024年01月21日
    浏览(77)
  • Python-OpenCV中的图像处理-图像直方图

    通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值( 0 到 255), y 轴是图片中具有同一个灰度的点的数目。 BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到255,你就需要 256 个数来显示上面的直方图。但是,如果你不需

    2024年02月12日
    浏览(71)
  • OpenCV-Python中的图像处理-图像直方图

    通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值( 0 到 255), y 轴是图片中具有同一个灰度的点的数目。 BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到255,你就需要 256 个数来显示上面的直方图。但是,如果你不需

    2024年02月12日
    浏览(61)
  • 数字图像处理实验(六)|图像分割{阈值分割、直方图法、OTUS最大类间方差法(edge、im2dw、imfilter、imresize)、迭代阈值法、点检测}(附matlab实验代码和截图)

    1 理解阈值分割的依据及确定阈值的方法; 2 掌握常用的边缘检测算子的使用方法,加深对不同算子优缺点的理解; 3 能够自行评价各主要算子在无噪声条件下和噪声条件下的分割性能; 1. 直方图法 测试图像:coins.png 原理:观察该图像的直方图,手动选取谷底点作为阈值对

    2024年02月05日
    浏览(61)
  • 【数字图像处理】直方图均衡化与规定化

    目录 直方图处理技术概述 直方图均衡化 公式推导  Matlab代码实现 图像的规定化 数学推导 单映射 Matlab代码 效果展示​编辑  组映射 Matlab代码 灰度级范围[0,L-1]的数字图像,在实际使用中,用哥灰度级的像素总数除以MN的整幅图像的像素数量,归一化到规律中进行计算,这样

    2023年04月26日
    浏览(43)
  • 数字图像处理实验(直方图均衡化&规定化)

    图像均衡化   图像均衡化是一种图像处理技术,它的目的是改善图像的对比度。   具体来说,对于一张图像,其直方图就是统计图像中各灰度级出现的次数的图像。通常情况下,图像的直方图会呈现不平衡的状态,即图像的某些灰度级出现的次数很多,而其它灰度级出现的

    2024年02月04日
    浏览(65)
  • FPGA图像处理仿真实验——直方图均衡化

    直方图均衡化实验,主要包括三部分,直方图统计、计算累加直方图、均衡化。 1、直方图统计        直方图统计就是记录每个灰度值在图片中出现的像素次数,灰度图片有0-255个灰度级,如果我们定义256个寄存器来存储数据比较麻烦,所以借用RAM来实现直方图统计。当输入

    2024年02月07日
    浏览(57)
  • Python-OpenCV中的图像处理-直方图

    通过直方图你可以对整幅图像的灰度分布有一个整体的了解。直方图的 x 轴是灰度值( 0 到 255), y 轴是图片中具有同一个灰度的点的数目。 BINS:上面的直方图显示了每个灰度值对应的像素数。如果像素值为 0到255,你就需要 256 个数来显示上面的直方图。但是,如果你不需

    2024年02月13日
    浏览(75)
  • C#使用OpenCv(OpenCVSharp)图像直方图均衡化处理实例

    本文实例演示C#语言中如何使用OpenCv(OpenCVSharp)对图像进行直方图均衡化处理。 直方图均衡化原理 直方图均衡化(Histogram Equalization)是一种常用的图像增强技术,用于改善图像的对比度和亮度分布。它通过重新分配图像灰度级的像素值,使得图像的直方图在灰度范围内更加

    2024年02月07日
    浏览(97)
  • python数字图像处理基础(七)——直方图均衡化、傅里叶变换

    均衡化原理 图像均衡化是一种基本的图像处理技术,通过更新图像直方图的像素强度分布来调整图像的全局对比度。这样做可以使低对比度的区域在输出图像中获得更高的对比度。 简单理解:改变图像对比度,让色彩更丰富,灰度值直方图:瘦高 - 均衡 本质上,直方图均衡

    2024年01月18日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包