数字图像处理之matlab大作业:自制图像处理小工具

学习的过程向来不是容易的,创造一个作品的过程更是不容易的。因此,在文章的最后,提供了两个现成的示例代码,大家直接可以拿来运行。在完成大作业的时候,大家可以在已有作品的基础上,按照自己的需求进行修改,添加我们课程要求的功能,并体会如何完成一个完整的项目。 

特别特别希望大家可以把下面的小功能整合成一个完整的项目~  期待!

下面分功能演示实现细节(这些功能源自于发布的大作业要求):

1、导入图片(或从摄像头加载图片 );

1)选择文件夹打开照片;

% '*.*'为显示当前文件夹中的所有文件;
% select a picture为文件对话框的标题;
% 'multiselect','on'为打开选择多个模式(默认为关);
% '.\'为要打开的文件路径
[file,path] = uigetfile('*.*','select a picture','multiselect','on','.\'); 
file_path=fullfile(path,file);
img=imread(file_path);
imshow(img);
title("原图像");

2)从摄像头加载图片;

加载摄像头需要获取硬件支持,所以在matlab上需要安装一个类似于驱动的软件,安装了好久网速不给力呀 ~   具体细节可参考:

MATLAB调用USB摄像头实现过程_飞天长虹的博客-CSDN博客_matlab调用摄像头

clear,clc,close all;
vid = videoinput('winvideo', 1, 'YUY2_640x480')
set(vid,'ReturnedColorSpace','rgb');
vidRes=get(vid,'VideoResolution');
width=vidRes(1);
height=vidRes(2);
nBands=get(vid,'NumberOfBands');
hImage=image(zeros(vidRes(2),vidRes(1),nBands));
preview(vid,hImage);
start(vid);
img = getsnapshot(vid);
image(img);
imshow(img);title("摄像头获取图像");
 

2、彩色图像灰度化;

3、灰度图像二值化;

4、目标检测(即两幅图像相减);

 功能2-4,请参考本人博客数字图像处理之matlab实验(一):基本操作_苗妮的博客-CSDN博客_matlab 形态学区域填充

5、图像的灰度变换(包括指数变换、对数变换);

6、直方图均衡化 

显示处理后图像和处理后图像直方图;处理前后对比效果显示在一张图中。

 功能5-6,请参考本人博客

数字图像处理之matlab实验(二):图像增强_苗妮的博客-CSDN博客

7、图像平滑(去除噪声)

对图像分别添加高斯噪声和椒盐噪声,并分别用均值滤波器、中值滤波器、高斯滤波器处理,并将处理结果显示在一张图中;

8、图像锐化(提取边缘)

分别采用robert和二阶算子提取图像边缘,并将处理结果显示在一张图中;

 功能7-8,请参考本人博客

数字图像处理之matlab实验(三):空间滤波器_苗妮的博客-CSDN博客

9、频域处理

对图像做平滑处理和提取边缘,并将处理结果显示在一张图中;

10、图像复原

对原图做运动模糊,并进行图像复原处理,将原图、模糊图、恢复后的模糊图显示在一张结果图中;

功能9-10,参考本人博客:

11、形态学处理

(1)腐蚀、(2)膨胀、(3)开运算、(4)闭运算处理、(5)形态学滤波、(6)击中与不击中变换;

功能11,参考本人博客

数字图像处理之matlab实验(五):形态学图像处理_苗妮的博客-CSDN博客

12、图像分割(提取图中的红苹果) 

(1)将已知图像进行消噪处理

(2)对彩色图像进行目标和背景分析

(3)通过颜色将图像进行分割

(4)进行形态学处理,提取目标

在将苹果分割的过程中,我们发现直方图分割、阈值分割在这个场景下是失效的,此处给出的是kmeans算法,当然基于颜色的分割效果理论上也是ok的,代码可以自己尝试写一下。

clear,clc,close all;
Image=imread('fruit.jpg');
subplot(121);imshow(Image),title('原图像'); 
hsv=rgb2hsv(Image);
h=hsv(:,:,1);
h(h>330/360)=0;
[N,M]=size(h);
training=h(:);
startdata = [0;60/360;120/360;180/360;240/360;300/360];
[IDX,C]= kmeans(training,6,'Start',startdata);
idbw = (IDX == 1);
template = reshape(idbw, size(h));
subplot(122);imshow(template),title('分割后的图像');
imwrite(template,'clusterseg.jpg');

13、硬币检测及计数 

(1)分割硬币

(2)去除噪声

(3)连通区域判断硬币个数 

Image=imread('coin.bmp');
subplot(131),imshow(Image),title('原图像');
BW=im2bw(Image);
SE=strel('square',6);
subplot(132),imshow(BW),title('二值图像');
result1=imopen(imclose(BW,SE),SE);               %先闭后开
subplot(133);imshow(result1);title('先闭后开');
[L, NUM] = bwlabel(result1, 4) %检测二值图像中连通域的个数
%[L, NUM] = bwlabel(BW, N)
% BW 为输入二值化图像;
% N 可取值为4或8表示连接四连通或八连通区域;
% NUM 为找到的连通区域数目;
% L 为输出图像矩阵,其元素值为整数,背景被标记为0,第一个连通区域被标记为1,第二个连通区域被标记为2,依此类推.所以你不明白的1,2,3即为第1,2,3个连通区域的标记
S=sprintf('检测到的硬币个数为:%d',NUM);msgbox(S);%弹窗显示运行结果

 14、检测特定的形状

本例演示了如何检测矩形:

clear,clc,close all;
image=rgb2gray(imread('shape.png'));
subplot(151),imshow(image),title('原图');
BW=edge(image,'canny');
subplot(152),imshow(BW),title('边界图像');
% imwrite(BW,'shapeedge.jpg');
SE=strel('disk',5); 
Morph=imclose(BW,SE);
subplot(153),imshow(Morph),title('形态学滤波'); 
% imwrite(Morph,'shapemorph.jpg');
Morph=imfill(Morph,'holes');
subplot(154),imshow(Morph),title('区域填充');
imwrite(Morph,'shapefill.jpg');
[B,L]=bwboundaries(Morph);
subplot(155),imshow(L),title('检测圆和矩形');
% imwrite(L,'Lplane.jpg');
STATS = regionprops(L,'Area', 'Centroid','BoundingBox');
len=length(STATS);
hold on
for i=1:len
    R=STATS(i).Area/(STATS(i).BoundingBox(3)*STATS(i).BoundingBox(4));
    boundary=fliplr(B{i});
    everylen=length(boundary);
    F=4*pi*STATS(i).Area/(everylen^2);
    dis=pdist2(STATS(i).Centroid,boundary,'euclidean');
    miu=sum(dis)/everylen;
    sigma=sum((dis-miu).^2)/everylen;
    C=miu/sigma;
    if R>0.9 && F<1 
        rectangle('Position',STATS(i).BoundingBox,'edgecolor','g','linewidth',2);
        plot(STATS(i).Centroid(1),STATS(i).Centroid(2),'g*');
    end
    if R>pi/4-0.1 && R<pi/4+0.1 && F>0.9 && C>10
        rectangle('Position',[STATS(i).Centroid(1)-miu,STATS(i).Centroid(2)-miu,2*miu,2*miu],...
            'Curvature',[1,1],'edgecolor','r','linewidth',2); 
        plot(STATS(i).Centroid(1),STATS(i).Centroid(2),'r*');
    end
end
hold off

15 、用Matlab设计实现图形化界面。

调用后台函数完成设计,函数可以调用Matlab工具箱中的函数,也可以自己编写函数。设计完成后,点击GUI图形界面上的菜单或者按钮,在某些图像处理操作中能够接收参数,进行必要的交互式操作后,最终能显示运行结果。可以参考例子如下:

1)视频参考:Matlab图像处理GUI(附代码)_哔哩哔哩_bilibili

附上源码链接:https://pan.baidu.com/s/11dTBQUX2NMalT-yi1sm70Q 提取码:dwqm

 2)这个忘记代码链接了,会把代码发群里。

16、优秀作品展示

1)曾同学的作品,详细参考她的博客,界面很清新,稍后会附上源码链接:基于MATLAB APP Designer设计图像处理小工具_栗几memeji的博客-CSDN博客

 2)代同学的作品:

3)其他可以参考的作品:

数字图像处理MATLAB大作业:基础版_黑瘦真的好看的博客-CSDN博客matlab大作业——基础模板设计_阿喜。的博客-CSDN博客

数字图像处理之matlab大作业:基础版图像处理工具_...._L的博客-CSDN博客

  • 27
    点赞
  • 272
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值