admin管理员组

文章数量:1585967

目录

实验描述

设计思路

功能模块​编辑

基础界面​编辑

开发工具

基础功能

最重要的全局变量(写在前面)

导入图片

从摄像头获取照片

彩色图像灰度化

灰度图像二值化

两幅图像叠加

目标检测(两幅图像相减)

图像灰度变换(指数变换、对数变换)

显示原图像直方图和将原图像直方图均衡化(写在一起)

添加高斯噪声和椒盐噪声

均值滤波器、中值滤波器、高斯滤波器滤波处

采用robert和二阶算子提取图像边

平滑处理和提取边缘

运动模糊,并进行图像复原处理

腐蚀、膨胀、开运算、闭运算

提取红苹果

硬币检测及计数

检测圆和矩形

 一些些创新功能

返回上一步

水平翻转

垂直翻转 

角度旋转 

相对亮度

 锐化

实验总结

参考资料(只能找到当时看的一些了)



  • 实验描述

本文章是基于MATLAB数字图像处理课程的结课作业,利用MATLAB设计了可视化界面进行基础版图像处理,其中功能包括作业要求的功能,额外还设计了一些创新功能,包括但不限于相对亮度调整、返回上一步等。其中内容多来自于课程内容和上网查询资料获取到的内容的融会贯通,通过本次实验,完成了图像处理app的实现可以进行简单的图像处理,以及特殊功能检测。


  • 设计思路

  • 功能模块

  • 基础界面

  • 开发工具

MATLAB R2021a App Designer


  • 基础功能

  • 最重要的全局变量(写在前面)

    properties (Access = private)
        originalpicture; % Description
        lastpicture;
        changedpicture;
        changedpicture2;
        upgradepicture;
        D0;
    end

  • 导入图片

函数uigetfile()打开文件选择对话框,选择文件,返回文件名和文件路径。有了文件名和文件路径后读文件函数读取相应的文件将返回的文件路径和文件名赋给图片,使用imshow将其显示在界面指定位置上如果未选择文件则弹出窗口,显示提醒未选择图片,然后返回图像界面。

[filename,pathname] = uigetfile({'*.jpg';'*.bmp';'*.*'},'选择图片');
            if isequal(filename,0)||isequal(pathname,0)
                msgbox('您未选择图片','温馨提示','help');
                return;
            else
                x=strcat(pathname,filename);
                app.originalpicture=imread(x);
                imshow(app.originalpicture,'Parent',app.UIAxes1);
                app.lastpicture=app.originalpicture;
                app.changedpicture=app.originalpicture;
            end

 

 若不选择图像,点击取消的话会弹出提醒窗口


  • 从摄像头获取照片

使用videoinput函数生成窗口对象并同步画面。利用函数获取图片的帧,当关闭窗口时,将关闭窗口时的截取图像显示在规定的坐标中

obj = videoinput('winvideo',1);
            h=preview(obj);
            while ishandle(h)
                app.originalpicture = getsnapshot(obj);  % 获取帧
                app.changedpicture=app.originalpicture;
                imshow(app.originalpicture,'Parent',app.UIAxes1);
                title(app.UIAxes1,'原始图片');
                drawnow
            end

 


  • 彩色图像灰度化

利用im2gray()函数将彩色影像RGB转换成灰度影像Grayscale,由im2gray创建的灰度图像是一个由强度值组成的单一平面。im2gray函数将RGB值转换为灰度值,将R、G、B分量加权和:0.2989*R+0.5870*G+0.1140*B

if isequal(app.originalpicture,'')
                msgbox('无图片','提示',"help");
            else
                gray=im2gray(app.originalpicture);
                app.lastpicture=app.changedpicture;
                imshow(gray,'Parent',app.UIAxes2);
                app.changedpicture=gray;
            end


  • 灰度图像二值化

函数im2bw使用阈值(threshold)变换法把灰度图像(grayscale image)转换成二值图像。所谓二值图像, 一般意义上是指只有纯黑(0)、纯白(255)两种颜色的图像。BW = im2bw(I,level),其将灰度图像 I 转换为二进制图像。输出图像 BW 将输入图像中亮度值大于 level 的像素替换为值1 (白色),其他替换为值0(黑色)。你指定 level 在 [0,1]之间,不用管输入图像的等级。函数graythresh 能用来自动计算变量 level 。如果你不指定 level ,im2bw 使用 0.5。

if isequal(app.originalpicture,'')
                msgbox('无图片','提示',"help");
            else
                black=im2bw(app.originalpicture);
                app.lastpicture=app.changedpicture;
                imshow(black,'Parent',app.UIAxes2);
                app.changedpicture=black;
            end

 


  • 两幅图像叠加

进行两幅图像的加法,或者给一幅图像加上一个常数,可以调用imadd函数来实现。imadd函数将某一幅输入图像的每一个像素值与另一幅图像相应的像素值相加,返回相应的像素值之和作为输出图像。Z = imadd(X,Y),其中,X和Y表示需要相加的两幅图像,返回值Z表示得到的加法操作结果。

[filename,pathname] = uigetfile({'*.jpg';'*.bmp';'*.*'},'选择图片');
            if isequal(filename,0)||isequal(pathname,0)
                msgbox('您未选择图片','温馨提示','help');
                return;
            else
                x=strcat(pathname,filename);
                addpic=imread(x);
                imshow(addpic,'Parent',app.UIAxes2);
            end
            result=imadd(app.originalpicture,addpic);
            imshow(result,'Parent',app.UIAxes3);


  • 目标检测(两幅图像相减)

图像减法也称为差分方法,是一种常用于检测图像变化及运动物体的图像处理方法。imsubtract函数可以将一幅图像从另一幅图像中减去,或者从一幅图像中减去一个常数。imsubtract函数将一幅输入图像的像素值从另一幅输入图像相应的像素值中减去,再将这个结果作为输出图像相应的像素值。Z = imsubtract(X,Y),其中,Z是X-Y操作的结果。以下代码首先根据原始图像生成其背景亮度图像,然后再从原始图像中将背景亮度图像减去,从而生成减去后的图像。

[filename,pathname] = uigetfile({'*.jpg';'*.bmp';'*.*'},'选择图片');
            if isequal(filename,0)||isequal(pathname,0)
                msgbox('您未选择图片','温馨提示','help');
                return;
            else
                x=strcat(pathname,filename);
                targetpic=imread(x);
                imshow(targetpic,'Parent',app.UIAxes2);
            end
            result=imabsdiff(targetpic,app.originalpicture);
            imshow(result,'Parent',app.UIAxes3);
            app.changedpicture=result;

图像的相减可以用来检测两幅图中不同的部分,检测图像之间的差异,增强细节,也可以用于一幅图像减去像素值,使图片变暗。但需要注意的是,相减的两幅图像尺寸应该相同。


  • 图像灰度变换(指数变换、对数变换)

采用log函数进行对数变换(参数值必须为double类型),用im2uint8()函数将灰度图像转换为8位图,可视化显示新生成的图。指数变换能增强图像中亮区域的细节(对比度提高),同时弱化图像中暗区域的细节(对比度降低)。

%指数变换
app.lastpicture=app.changedpicture;
            if isequal(app.originalpicture,'')
                msgbox('无图片','提示',"help");
            else
                if (ndims(app.originalpicture)==3)
                    app.originalpicture=rgb2gray(app.originalpicture);
                end
                A1 = double(app.originalpicture);
                A2 = 1.5.^(A1*0.070)-1;
                A2 = uint8(A2);
                imshow(A2,'Parent',app.UIAxes2);
                app.changedpicture=A2;
%对数变换
            app.lastpicture=app.changedpicture;
            if isequal(app.originalpicture,'')
                msgbox('无图片','提示',"help");
            else
                if (ndims(app.originalpicture)==3)
                    app.originalpicture=rgb2gray(app.originalpicture);
                end
                h=log(1+double(app.originalpicture));
                h=mat2gray(h);
                h=im2uint8(h);
                imshow(h,'Parent',app.UIAxes2);
                app.changedpicture=h;
            end

(指数)

(对数)

指数变换能增强图像中亮区域的细节(对比度提高),同时弱化图像中暗区域的细节(对比度降低)对数变换可以增强低灰度,减弱高灰度值

本文标签: 图像处理小工具matlabappDesigner