MATLAB:Image Processing Toolbox工具箱入门实战

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

目录

1.基本图像导入、处理和导出

2.实战项目一:利用imfindcircles()函数检测和测量图像中的圆形目标

3.实战项目二:图像增强(预处理)统计米粒

4.实战项目三:利用Sobel算子进行裂纹检测


1.基本图像导入、处理和导出

Basic Image Import, Processing, and Export- MATLAB & SimulinkThis example shows how to read an image into the workspace, adjust the contrast in the image, and then write the adjusted image to a file.https://www.mathworks.com/help/releases/R2021b/images/image-import-and-export.html以下是输入的缺陷检测图片1.jpg(左),和经过histeq(直方图均衡使强度值扩展分布到了图像的完整范围内)函数提高对比度的2.jpg(右)。

I = imread("1.jpg");
whos I % 使用 whos 命令,检查 imread 函数如何在工作区中存储图像数据。
% 调用 imhist 函数创建直方图。
% 请在调用 imhist 之前使用 figure 命令,这样直方图就不会覆盖当前图窗窗口中显示的图像 I。
imhist(I)  
I2 = histeq(I);  % 使用 histeq 函数提高图像的对比度
imshow(I2)
imwrite(I2, '2.jpg');  % 使用 imwrite 函数,将刚刚经过调整的图像 I2 写入磁盘文件
imfinfo('2.jpg')  % imfinfo 函数返回文件中图像的相关信息

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

2.实战项目一:利用imfindcircles()函数检测和测量图像中的圆形目标

Detect and Measure Circular Objects in an Image- MATLAB & Simulink ExampleThis example shows how to automatically detect circular objects in an image and visualize the detected circles.https://www.mathworks.com/help/releases/R2021b/images/detect-and-measure-circular-objects-in-an-image.htmlimfindcircles()使用基于圆形 Hough 变换 (CHT) 的算法在图像中寻找圆形。之所以使用这种方法,是因为当存在噪声、遮挡和变化的光照条件时该方法表现稳健。

有关imfindcircles()的详细信息,请参阅帮助文档:

Find circles using circular Hough transform - MATLAB imfindcirclesThis MATLAB function finds the circles in image A whose radii are approximately equal to radius.https://www.mathworks.com/help/releases/R2021b/images/ref/imfindcircles.html本项目旨在演示调参来寻求圆目标的过程。

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

rgb = imread('coloredChips.png');
imshow(rgb)

% 此段代码是为了清楚对象是比背景亮还是比背景暗,输出灰度图片看一看
% gray_image = rgb2gray(rgb);
% imshow(gray_image)

% 此段代码用来确定imfindcircles函数里的radiusRange,测出来应该是[25 30]
% d = drawline;  % 画一条线,大致画出圆的直径
% pos = d.Position  % 线的位置
% diffPos = diff(pos);  % 各行之间的一阶差分,也就是delta x和delta y
% diameter = hypot(diffPos(1),diffPos(2))  % 平方和的平方根(斜边)

% 这里开始找圆,用的是imfindcircles()函数
% 背景相当亮,大多数塑料片比背景暗,将参数 'ObjectPolarity' 设置为 'dark' 以搜索较暗的圆。
% imfindcircles 有两种不同寻找圆的方法:默认方法(称为相位编码方法)/两阶段方法,这里指定使用两阶段方法
% 两种方法都能准确找到部分可见(遮挡)塑料片的中心和半径。
[centers,radii] = imfindcircles(rgb,[25 30],'ObjectPolarity','dark', ...
    'Sensitivity',0.92,'Method','twostage');

% 注意到黄色圆都没有被检测到
% 与背景相比,黄色塑料片的强度几乎相同,甚至更亮。因此,要检测黄色塑料片,'ObjectPolarity' 改为 'bright'。
% [centersBright,radiiBright] = imfindcircles(rgb,[25 30], ...
%     'ObjectPolarity','bright','Sensitivity',0.95)
% 找到了三个原先未检测到的黄色塑料片,但仍有黄色塑料片未检测到

% 要查找圆,imfindcircles 仅使用图像中的边缘像素。这些边缘像素基本上是具有高梯度值的像素。
% 'EdgeThreshold' 参数控制像素的梯度值必须有多高,才能将其视为边缘像素并包含在计算中。
% 该参数的高值(更接近 1)只允许包含强边缘(较高梯度值),而低值(更接近 0)的宽容度更高,可在计算中包含较弱的边缘(较低梯度值)。
% 对于检测不到黄色塑料片的情况,是因为对比度低,一些边界像素(在塑料片的圆周上)预期具有低梯度值。因此,请降低 'EdgeThreshold'。
[centersBright,radiiBright,metricBright] = imfindcircles(rgb,[25 30], ...
    'ObjectPolarity','bright','Sensitivity',0.95,'EdgeThreshold',0.1);

imshow(rgb)
hBright = viscircles(centersBright, radiiBright,'Color','b');  % 蓝色画出
h = viscircles(centers,radii);  % 红色画出

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

3.实战项目二:图像增强(预处理)统计米粒

本案例说明如何在分析前的预处理步骤增强图像。例如校正背景亮度不均匀问题,并将图像转换为二值图像,以便于识别前景对象(单个米粒)。然后分析对象,例如计算每粒大米的面积,并计算图像中所有对象的统计量。

关于形态学图像处理的知识(strel腐蚀和imopen形态学开操作),可参考冈萨雷斯的数字图像处理第9章和以下资料:

形态学运算与仿真:图像处理中形态学操作的简单解释 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/628780157

简而言之,形态学运算包括膨胀、腐蚀、开运算、闭运算等。其中:

  • 膨胀操作可以将图像中的物体变大,使它更加连通;
  • 腐蚀操作则可以将图像中的物体变小,使它更加细化;
  • 开运算可以去除噪声,平滑图像的边缘;
  • 闭运算可以填补图像中物体的孔洞。

这里应用strel腐蚀和imopen形态学开操作,目的是得到背景。

经过预处理得到图像的二值版本,然后利用bwconncomp()在二值图像中查找所有连通分量(对象)得到所有米粒的信息。最后展示了经过预处理后的图片和米粒面积的直方图:

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

I = imread('rice.png');
% imshow(I)

% strel 对象表示一个平面形态学结构元素,该元素是形态学膨胀和腐蚀运算的重要部分。
se = strel('disk',15);
% 开操作Open先对图像进行腐蚀操作,然后再进行膨胀操作的组合过程,可以用于消除小的物体或细节,并且可以平滑物体的边界
% 闭操作Close则相反,它是先对图像进行膨胀操作,然后再进行腐蚀操作的组合过程。可以用于填补小的空洞或裂缝,并且也可以平滑物体的边界。
% imopen执行形态学开操作,然后得到背景
background = imopen(I,se);
% imshow(background)
I2 = I - background;
% 默认情况下,imadjust 对所有像素值中最低的 1% 和最高的 1% 进行饱和处理。此运算可提高输出图像的对比度。
I3 = imadjust(I2);
bw = imbinarize(I3);  % 使用 imbinarize 函数将灰度图像转换为二值图像
bw = bwareaopen(bw,50);  % 使用 bwareaopen 函数去除图像中的背景噪声。
cc = bwconncomp(bw,4);  % bwconncomp查找二值图像中的连通分量
% cc.NumObjects
labeled = labelmatrix(cc);  % 使用 labelmatrix 根据 bwconncomp 的输出创建标签矩阵,将二进制图像中的连通分量标记为唯一的整数值。使用标签矩阵可视化不同的连通分量。
RGB_label = label2rgb(labeled,'spring','c','shuffle');  % 为了更容易区分不同的连通分量,使用label2rgb将标签矩阵显示为RGB图像,并对标签的颜色随机。
% imshow(RGB_label)
graindata = regionprops(cc,'basic');  % regionprops返回二值图像中每个8连通分量(对象)的属性集的测量值。
grain_areas = [graindata.Area];
histogram(grain_areas)
title('Histogram of Rice Grain Area')

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

4.实战项目三:利用Sobel算子进行裂纹检测

Sobel算子实现步骤:

1.首先需要两个方向(水平和竖直方向)的滤波核:

这是因为边缘检测的目的标识数字图像中亮度变化明显的点图像属性中的显著变化通常反映了属性的重要事件和变化。所以通常说来图像中梯度较大的点代表着边缘。边缘检测方法分为两类:

  • 基于搜索:利用一阶导数最大值检测边缘。通过寻找图像一阶导数中的最大值检测边界,然后利用计算结果估计边缘的局部方向,代表算法是Sobel算子Scharr算子。这是因为边缘附近的像素值会有明显突变,即变化最大,也就是一阶导数最大(实际操作中通常设置一个阈值)。那么找到最大的一阶导数也就找到了像素变化最大的点,即边缘点。
  • 基于零穿越:利用二阶导数为0检测边缘。代表算法是Laplace算子。因为在一阶导数的基础上再求一次导,那么此时零点就是变化最大的点,即边缘点。

导数定义:matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

对于不连续的函数,一阶导数(一阶均差)可以写作:

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

所以有:matlab工具image processing toolbox,图像处理,计算机视觉,人工智能,也就是后-前。

因此我们有:

x方向的梯度:拿后一列(下标j+1)减去前一列(下标j-1):

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

y方向的梯度:拿后一行(下标i+1)减去前一行(下标i-1):

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

写成卷积表达式就是:

梯度:matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

为计算方便起见,通常:matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

以上卷积核称为Prewitt算子。现在我们在计算梯度时引入加权平均,就构成了Sobel算子Schar算子:

Sobel算子提高了4邻域的权重:

Schar算子能弥补Sobel内核为3时的误差:

以下是Sobel算子的代码实现(Matlab):

%% 1.导入
img=imread("2.png");
[x,y,z]=size(img);
img=im2double(img);  % 数据类型转化uint8-->double,uint8类型参与运算容易溢出
if(z==3)   % rgb-->gray
   img_gray=(img(:,:,1).*229+img(:,:,2).*578+img(:,:,3).*114)./1000;
end
%% 2.Sobel算子锐化
img_sobel=zeros(x,y);
img_sobelx=img_sobel;
img_sobely=img_sobel;
for i=2:x-1
    for j=2:y-1
       img_sobelx(i,j)=abs(img_gray(i-1,j+1)-img_gray(i-1,j-1)+2*img_gray(i,j+1)-2*img_gray(i,j-1)+img_gray(i+1,j+1)-img_gray(i+1,j-1));
       img_sobely(i,j)=abs(img_gray(i-1,j-1)-img_gray(i+1,j-1)+2*img_gray(i-1,j)-2*img_gray(i+1,j)+img_gray(i-1,j+1)-img_gray(i+1,j+1));
    end    
end
img_sobel=img_sobelx+img_sobely;
for i=1:x
    for j=1:y
        if img_sobel(i,j)>0.3
           img_sobel(i,j)=1;
        else
           img_sobel(i,j)=0;
        end
    end    
end
figure(1)
imshow(img)  % 原图
figure(2)
imshow(img_sobel)  % 进行过Sobel之后的
%% 3.去噪
BW = bwareaopen(img_sobel,8);
figure(3)
imshow(BW)
%% 4.求连通分量,统计裂纹特征
cc = bwconncomp(BW,4);
labeled = labelmatrix(cc);
graindata = regionprops(cc,'basic');  
grain_areas = [graindata.Area];
%% 5.画图
figure
histogram(grain_areas)
title('Histogram of Crack Area')
matlab工具image processing toolbox,图像处理,计算机视觉,人工智能
原图
matlab工具image processing toolbox,图像处理,计算机视觉,人工智能
经过Sobel算子锐化后的图像
matlab工具image processing toolbox,图像处理,计算机视觉,人工智能
对上述锐化过的图像进行去噪
matlab工具image processing toolbox,图像处理,计算机视觉,人工智能
裂纹面积特征统计直方图

以下是用Canny算子检测的图像代码(Python):

import cv2
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

# 读取图像
img = cv2.imread('F:/2.png')
img_RGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 转成RGB方便后面显示

# 灰度化处理图像
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 高斯滤波
gaussianBlur = cv2.GaussianBlur(grayImage, (3, 3), 0)

# 阈值处理
ret, binary = cv2.threshold(gaussianBlur, 127, 255, cv2.THRESH_BINARY)

# Roberts算子
kernelx = np.array([[-1, 0], [0, 1]], dtype=int)
kernely = np.array([[0, -1], [1, 0]], dtype=int)
x = cv2.filter2D(binary, cv2.CV_16S, kernelx)
y = cv2.filter2D(binary, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Roberts = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

# Prewitt算子
kernelx = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]], dtype=int)
kernely = np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]], dtype=int)
x = cv2.filter2D(binary, cv2.CV_16S, kernelx)
y = cv2.filter2D(binary, cv2.CV_16S, kernely)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Prewitt = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

# Sobel算子
x = cv2.Sobel(binary, cv2.CV_16S, 1, 0)
y = cv2.Sobel(binary, cv2.CV_16S, 0, 1)
absX = cv2.convertScaleAbs(x)
absY = cv2.convertScaleAbs(y)
Sobel = cv2.addWeighted(absX, 0.5, absY, 0.5, 0)

# Laplacian算子
dst = cv2.Laplacian(binary, cv2.CV_16S, ksize=3)
Laplacian = cv2.convertScaleAbs(dst)

# Canny算子
Canny = cv2.Canny(gaussianBlur, 50, 150)

## 显示图形
plt.imshow(Canny, cmap=plt.cm.gray)
plt.axis('off')
plt.savefig('F:/Canny.png', bbox_inches='tight', pad_inches=0)
plt.show()

matlab工具image processing toolbox,图像处理,计算机视觉,人工智能

1文章来源地址https://www.toymoban.com/news/detail-840915.html

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

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

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

相关文章

  • MATLAB cftool工具箱——曲线拟合

        cftool工具箱可以将数据点拟合成曲线或曲面并直观显示出图像。能实现多种类型的线性、非线性曲线/面拟合。     有两种方式打开cftool:(1)在命令行窗口输入\\\"cftool\\\"并回车;(2)在MATLAB的\\\"APP\\\"选项栏中找到\\\"Curve Fitting\\\"程序打开即可。     界面左上部分为数据区域,下拉框中

    2024年02月08日
    浏览(52)
  • 【MATLAB第57期】基于MATLAB的双隐含层BP神经网络回归预测模型(无工具箱版本及工具箱版本对比)

    数据为案例数据 。103行样本,7输入1输出数据。 训练集数据的R2为:0.9022 测试集数据的R2为:0.87266 训练集数据的MAE为:1.8189 测试集数据的MAE为:2.1658 训练集数据的MBE为:-0.00088469 测试集数据的MBE为:0.3059 数据与无工具版本相同,数据顺序也相同。 训练集数据的R2为:1 测试

    2024年02月16日
    浏览(53)
  • 遗传算法与Matlab GA工具箱

    GA是一种进化算法,基本原理效仿生物界“物竞天择,适者生存”的演化法则。 一些基本概念 种群population:问题潜在的解集 个体individual:每一个可能的解,通过基因编码一定数目的个体形成一个种群 适应度fitness:由此判断个体的优良,进而进行选择 选择selection、交叉cr

    2024年02月09日
    浏览(60)
  • Matlab样条工具箱及曲线拟合

    Matlab样条工具箱提供了样条的建立、操作、绘制等功能. 建立一个样条曲线或曲面,根据前缀可分为4类: 前缀 类别 cs* 三次样条 pp* 分段多项式样条 sp* B样条,系数为基函数系数 rp* 有理B样条 函数操作:求值、求导数、求积分等; 节点操作:节点重数的设定、修改等. 1.三次

    2024年02月08日
    浏览(61)
  • matlab系统辨识工具箱及其反向验证

    系统辨识工具箱 什么时候使用系统辨识,当系统传递函数不确定(在多大程度上不确定?)时,通过对输入输出数据采集,通过数学迭代找到控制对象的近似模型。在找到近似模型(传递函数)后,就可以使用线性化调参工具对系统控制参数进行整定,进行控制系统设计。 调用命

    2024年02月05日
    浏览(51)
  • matlab机器人工具箱基础使用

    资料:https://blog.csdn.net/huangjunsheng123/article/details/110630665 test1.m

    2024年02月12日
    浏览(56)
  • 在Matlab中安装LibSVM工具箱

    1 下载工具箱 地址:LibSVM下载地址 下拉网页: 2 注意事项: 2.1 注意测试数据 ==官网下载的数据包中没有Matlab对应的数据集格式,点此下载:heart_scale.mat.== 链接: https://pan.baidu.com/s/15LYMilm8asw9EYkHmifLyg 提取码: trws 复制这段内容后打开百度网盘手机App,操作更方便哦 –来自百度

    2024年02月04日
    浏览(46)
  • 【Matlab】相机标定(计算机视觉工具箱)

    图像处理和计算机视觉是Matlab的一个主要应用领域,这部分包括4个工具箱——图像处理、计算机视觉、雷达、医学图像。由于视觉的东西容易呈现,所以先从计算机视觉工具箱学起。 官方文档对计算机视觉工具箱的介绍如下:设计和测试计算机视觉、3D 视觉和视频处理系统

    2024年02月05日
    浏览(104)
  • MATLAB曲线拟合工具箱(cftool)介绍(完结)

    本文通过实例对MATLAB曲线拟合工具箱进行详细讲解,帮助大家更容易理解曲线拟合工具箱(cftool)。 已知 x = [0 0.2 0.50.8 0.9 1.3 1.4 1.9 2.1 2.2 2.5 2.6 2.9 3.0]; y = [1.27792.1596 2.7311 2.5974 2.4068 1.6215 1.4178 0.9955 0.9666 0.8837 0.9639 1.00311.1233 1.1583]; 并且根据某种物理或数学关系确定y=f(x)的表达

    2024年02月02日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包