MATLAB GUI的多种数字图像处理(图像风格化)

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

摘  要

    本课程设计基于MATLAB GUI进行创建UI界面,并集成多种图像处理,包括图像模糊、图像锐化、BBHE直方图均衡化、图像素描、图像反色、图像浮雕、canny边缘检测、图像膨胀、图像腐蚀、图像油画功能,同时也给了保存图像的功能,经运行验证,UI界面可视化良好,图像处理所获得的结果均符合预期要求,并给出了图像处理算法的改进方向,可以提高图像处理效果。

关键词   MATLAB GUI 图像处理 图像油画

目录

摘  要... 2

1     引言... 4

2     图像处理整体UI介绍... 5

3     图像处理样式代码及原理分析... 6

2.1     复杂图像算法... 6

2.2     其他图像处理算法... 9

4     图像处理结果展示及分析... 12

5     UI及图像算法改进... 18

5.1     整体UI 18

5.2     图像油画效果改进... 18

5.3     素描画效果改进... 18

5.4     图像边缘检测改进... 18

结论... 19

参考文献... 20

附录(主体代码)... 21

  1. 引言

随着数字图像处理技术的不断发展,人们对图像处理工具的需求也日益增长。为了满足这一需求,我们开发了一款基于MATLAB GUI的图像处理软件。该软件集成了多种图像处理功能,包括图像模糊、图像锐化、BBHE直方图均衡化、图像素描、图像反色、图像浮雕、canny边缘检测、图像膨胀、图像腐蚀和图像油画,旨在为用户提供一个全面且易于使用的工具来处理他们的图像。

此外,我们还提供了保存图像的功能,使用户能够轻松地保存他们处理后的图像。经过运行验证,我们发现UI界面可视化良好,且图像处理所获得的结果均符合预期要求。

当然,我们也意识到仍有改进空间。在未来,我们将继续探索如何改进图像处理算法,以提高图像处理效果。总之,本课程设计为用户提供了一个强大且易于使用的图像处理工具,并为未来的改进奠定了基础。利用MATLAB软件的强大的矩阵计算功能和丰富实用的函数库,实现对图像的数字处理。

利用MATLAB GUI向导设计控件,提供用户多种图形对象和交互方式,减少了繁冗复杂的代码编译,使得编程的可视化和仿真分析更直观、便捷。

遵循简单性、一致性和习常性的设计原则,使得界面清晰、美观和易于使用。

涵盖多种图像处理算法和功能模块,支持多种图像数据格式和文件格式,展现了数字图像处理的效果和应用[1]。

本文将介绍该程序的设计思路、功能模块、实现方法和运行效果,以及遇到的问题和解决方案。

  1. 图像处理整体UI介绍

       本课程设计基于MATALB GUI 创建界面,其初始化页面如下图,完成的功能由选择处理图像和保存处理后的图像,可进行的操作有图像模糊、图像锐化、图像BBHE直方图均衡化、图像素描画、图像反色、图像雾化、图像浮雕样式、图像边缘检测、图像膨胀、图像腐蚀、图像油画和图像动漫化图像处理。

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui图 2—1 初始化页面


整体GUI处理流程如下图:

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 2—2 GUI 原理图

通过创建UI界面,定义UI内容,然后分别定义图像函数,通过按钮进行回调图像处理的函数,即完成任务。

  1. 图像处理样式代码及原理分析

  1. 复杂图像算法
  1. BBHE直方图均衡化

这段MATLAB代码实现的是双边直方图均衡化(BBHE)算法,它是直方图均衡化算法的一种改进方法,可以提高图像对比度和视觉效果。

该算法的原理如下:

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui


图 3—1 BBHE算法原理图

function junhengimage = junhengImage(image)

    I = image; % 读取图像

    Ir = I(:, :, 1); % 提取红色分量

    Ig = I(:, :, 2); % 提取绿色分量

    Ib = I(:, :, 3); % 提取蓝色分量

    % 调用 BBHE() 进行各分量图像增强

    I1 = BBHE(Ir);

    I2 = BBHE(Ig);

    I3 = BBHE(Ib);

    In = cat(3, I1, I2, I3); % 构造多维数组

    junhengimage = In; % 返回增强后的图像

    function A = BBHE(I)

        Xm = floor(mean2(I)); % 求图像灰度均值 Xm

        Xmin = min(I(:)); % 最小灰度值

        Xmax = max(I(:)); % 最大灰度值

        [m, n] = size(I); % 获取图像大小

        nl = sum(I(:) <= Xm); % 统计小于等于平均值的各级灰度值数量

        nu = sum(I(:) > Xm); % 统计大于平均值的各级灰度值数量

        Xl = histcounts(I(I <= Xm), Xmin:Xm+1);

        Xu = histcounts(I(I > Xm), Xm:Xmax+1); % 使用 histcounts 函数进行迭代统计

        Pl = Xl ./ nl;  % 记录对应各级灰度值的概率密度

        Pu = Xu ./ nu;

        Cl = cumsum(Pl); % 累计密度函数

        Cu = cumsum(Pu);

        fl = double(Xmin) + Cl .* (double(Xm) - double(Xmin));

        fu = double(Xm + 1) + Cu .* (double(Xmax) - double(Xm + 1));

        I_equal = I;

        lower_indices = I <= Xm;

        higher_indices = I > Xm;

        I_equal(lower_indices) = fl(I(lower_indices) - Xmin + 1);

        I_equal(higher_indices) = fu(I(higher_indices) - (Xm + 1) + 1);

        A = I_equal; % 返回均衡化后的灰度图像

    end

end

  1. 油画函数原理及代码

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 3—2 油画原理

上述原理图清晰得解释了油画生成的原理,利用像素点周围灰度值出现次数最多的像素点灰度值代替当前位置的灰度值实现油画效果[2]。

function youhuaImage = youhua(image, brushSize, intensity)

    [width, height, ~] = size(image);

    youhuaImage = uint8(zeros(width, height, 3));

    grayImage = rgb2gray(image);

    intensityLevel = 180;

    scaledImage = floor(double(grayImage) * (intensityLevel / 255)); % 缩放灰度图像的像

    for x = 1:width % 遍历图像的每个像素点

        for y = 1:height

            intensityCounter = zeros(1, intensityLevel + 1);

            colorR = zeros(1, intensityLevel + 1);

            colorG = zeros(1, intensityLevel + 1);

            colorB = zeros(1, intensityLevel + 1);

            for i = (x - brushSize):(x + brushSize) % 遍历当前像素点的邻域

                for j = (y - brushSize):(y + brushSize)% 检查邻域内的像素是否在图像范围内

                    if i > 0 && i <= width && j > 0 && j <= height  % 获取当前像素的灰度

                        intensity = scaledImage(i, j) + 1;% 更新计数器和颜色向量

                        intensityCounter(intensity) = intensityCounter(intensity) + 1;

                        colorR(intensity) = image(i, j, 1);

                        colorG(intensity) = image(i, j, 2);

                        colorB(intensity) = image(i, j, 3);

                    end

                end

            end

            [~, index] = max(intensityCounter);  % 找到出现次数最多的灰度值

            youhuaImage(x, y, 1) = colorR(index); % 更新输出图像的像素值

            youhuaImage(x, y, 2) = colorG(index);

            youhuaImage(x, y, 3) = colorB(index);

        end

    end

end

  1. 图像素描画原理及代码

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 3—3 素描画原理图

这个函数使用高斯滤波器对输入图像进行模糊处理,然后计算输入图像和模糊后的图像的差值,并将差值图像转换为二值图像,从而产生类似素描的效果[3]。

function sumiaoImage = sumiaoImage(image)

    image = double(image) / 255; %并归一化

    imageCopy = image; % 创建一个与输入图像相同的副本

    halfSize = 20; % 定义高斯滤波器的尺寸和标准差

    filterSize = 2 * halfSize + 1;

    sigma = filterSize / 6;

    gaussianFilter = fspecial('gaussian', filterSize, sigma);

filteredImage = imfilter(imageCopy, gaussianFilter, 'conv');

imageDiff = image - filteredImage; % 计算输入图像和模糊后的图像的差值

    imageOut = imageDiff + 0.5; % 将差值图像偏移0.5

    result = im2bw(imageOut, 0.48); % 将偏移后的图像转换为二值图像

    r = im2double(result);

    g = im2double(result);

    b = im2double(result);

    sumiaoImage = cat(3, r, g, b);

end

  1. 其他图像处理算法
  1. 图像动漫化

使用 imbilatfilt函数对图像进行双边滤波,以平滑图像的颜色。使用 `edge` 函数对图像进行边缘提取,得到一个二值图像。最后,将双边滤波后的图像与边缘图像进行合并,得到动漫化后的图像。

% 图像动漫化函数

function dongmanImage = dongmanImage(image)

    dongmanImage = imbilatfilt(image,100,20); %双边滤波

    ed_img = 1-edge((rgb2gray(image)),'canny',[0.07,0.1]); %边缘提取

    dongmanImage  = dongmanImage .*(uint8(repmat(ed_img,[1,1,3]))); %合并

end

  1. Canny边缘检测

先将图像进行灰度化,然后调用内置edge函数对图像进行canny边缘检测

    % 图像边缘检测函数

    function edgeImage = Edge(image)

        grayscaleImage = rgb2gray(image);

        edgeImage = edge(grayscaleImage, 'Canny');

    end

  1. 图像模糊

调用内置fspecial高斯滤波器函数对图像加高斯模糊

% 图像模糊函数

    function mohuImage = mohuImage(image, radius)

        h = fspecial('disk', radius);

        mohuImage = imfilter(image, h, 'replicate');

    end

  1. 图像锐化

使用 imgaussfilt 函数对输入图像进行高斯模糊处理。这一步是为了去除图像中的噪声和细节然后计算输入图像和模糊后的图像的差值,并将差值乘以一个系数。这个系数由函数的第二个参数amount指定,它控制锐化效果的强度。最后算法将乘以系数后的差值加到输入图像上,从而增强图像中颜色变化的对比度。

    % 图像锐化函数

    function ruihuaImage = ruihuaImage(image, amount)

        blurredImage = imgaussfilt(image, 2);

        mask = image - blurredImage;

        ruihuaImage = image + amount * mask;

        ruihuaImage = uint8(max(0, min(ruihuaImage, 255)));

    end

  1. 图像反色

用255-输入图像的每个像素值达到取反的目的。

% 图像反色函数

    function fanseImage = fanseImage(image)

        fanseImage = 255 - image;

    end

  1. 图像雾化

随机生成噪声直接叠加到输入图像上从而产生雾化图像

% 图像雾化函数

   function wuhuaImage = addwuhua(image, amount)

    noise = randn(size(image)) * 64;

    wuhuaImage = double(image) + amount * noise;

    wuhuaImage = uint8(max(0, min(wuhuaImage, 255)));

    end

  1. 图像浮雕样式

首先定义了一个浮雕滤波器3×3的卷积核,用于增加浮雕效果的强度和锐化效果。然后,使用imfilter 函数对图像进行卷积运算,得到浮雕后的图像。最后,将浮雕图像的亮度调整为原来的亮度加上 160。

 % 图像浮雕样式函数

 function fudiaoImage = fudiaoImage(image)

      filter = [0 1 0; 1 -4 1; 0 1 0];  % 增加浮雕滤波器的强度和锐化效果

    fudiaoImage = imfilter(image, filter, 'replicate', 'conv');

    fudiaoImage = uint8(fudiaoImage + 160); % 调整浮雕图像的亮度

end

  1. 图像膨胀

直接调用imdilate对图像进行膨胀

  % 图像膨胀函数

    function pengzhangImage = pengzhangImage(image)

        se = strel('disk', 5);

        pengzhangImage = imdilate(image, se);

    end

  1. 图像腐蚀

直接调用imerode对图像进行腐蚀操作

 % 图像腐蚀函数

    function fushiImage = fushiImage(image)

        se = strel('disk', 5);

        fushiImage = imerode(image, se);

    end

  1. 图像处理结果展示及分析
  1. BBHE直方图均衡化

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—1  BBHE直方图均衡化

从效果图与原图对比分析,发现经过bbhe均衡化之后的图像,背景变亮,无什么噪点,较清晰的还原出背景,但整体色调较原图偏冷。

  1. 油画

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—2  油画效果

该油画效果函数,可以通过调整笔刷和强度对效果进行调整,上面效果图已经很好的将原图进行油画效果展示,若将笔刷调大,将会造成部分细节丢失。

  1. 素描

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—3 素描效果

如上图图像像素描画效果,对鲜花进行素描,已经较好的将鲜花的轮廓还原出来,但部分细节有些失真。

  1. 动漫

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—4 动漫效果

该图像的动漫画效果表现良好,基本将图像动漫画的较为生动。

  1. 边缘检测

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—5  Canny边缘检测

由于在进行边缘化的过程中对图像进行了滤波去掉噪声,所以可能会造成细节丢失,从上图来看,效果表现良好。

  1. 模糊

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—6  模糊效果

可以通过调整噪声的大小对模糊度进行调整。

  1. 锐化

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—7  锐化效果

图像锐化的效果是为了对模糊的图像变得更加清晰,先讲原图进行模糊化,再进行锐化,从上图的效果来看基本满足需求,但整体来看噪点会增多。

  1. 反色

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—8反色效果

反色即从每个像素点的灰度值进行取反。

  1. 雾化

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—9 雾化效果

图像的雾化即从原图表面覆盖噪声,但从上面效果图来看,覆盖噪声之后效果一般,导致噪点增加,与传统雾化图有差距。

  1. 浮雕

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—10 浮雕效果

图像浮雕化的目的是为了使原图像产生一定的立体感,上图效果图能够较好的使原图产生一定的立体感。

  1. 膨胀

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—11 膨胀效果

图像膨胀是一种形态学运算,它的目的是将目标图像扩大,运算效果取决于结构元素大小内容以及逻辑运算性质。它类似于“领域扩张”,将图像的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大。上图效果反映了该原理。

  1. 腐蚀

matlabgui界面设计图像处理,数字图像处理,matlab,图像处理,ui

图 4—12 腐蚀效果

图像腐蚀是一种形态学运算,它的目的是将目标图像收缩,运算效果取决于结构元素大小内容以及逻辑运算性质。它类似于“领域蚕食”,将图像的高亮部分被腐蚀,其运行结果图比原图的高亮区域更小。上图效果反映了该原理。

  1. UI及图像算法改进
  1. 整体UI

整体UI较为简陋,可以将其进行优化,形成多功能菜单,也可以增加某些函数继续完善图像处理,对于某些函数可以增加一些滑动条对其中的变量进行调整,使效果图进行动态化展示效果的变化,具体可以参考文章[5]

  1. 图像油画效果改进

通过对不同的图片进行油画处理,发现对于色彩比较杂的图片,油画效果表现不佳,可以通过采用不同尺度的笔刷按照从粗到细的顺序逐层绘制。在每层笔刷绘制中,首先使用增量Voronoi序列采样点和图像切线方向场确定笔刷流线,然后结合笔刷形状与笔刷高度场进行纹理贴图,得到最终的图像油画风格化绘制结果。与现有算法比较,文中算法不仅能模拟真实的油画绘制过程,而且生成的油画效果层次感更强,充分体现了图像的结构特征和油画细节[4]。

  1. 素描画效果改进

首先对原始图像做去噪、增强等预处理,用微分算子提取多像素宽的轮廓线条;再通过膨胀和腐蚀处理并将结果相减生成多层双边轮廓线条,用运动模糊处理多层双边线条得到素描纹理;最后融合边缘和素描纹理,得到素描效果图像。通过对不同特点的图像进行实验,证明该方法得到的素描画的效果比较接近手绘风格[6]。

  1. 图像边缘检测改进

常见的边缘检测算子包括Sobel算子、Prewitt算子、Roberts算子、Canny算子和Marr-Hildreth算子等[7],都可以进行改进,同时还有关机用CNN神经网络进行边缘检测。

其他图像处理函数都可以进行改进,使效果更佳。

结论

本课程设计所展示的结果能够较好的完成UI提供的图像处理要求,同时结合多种图像处理算法集成与GUI上使图像处理操作更加简便,同时提供了保存处理之后的照片的功能,能够对多种图像处理进行简洁混用操作,极大的方便了对图像进行处理。

同时在本次课程设计中,学习到了GUI基础知识,做了一个简单的UI界面进行操作,对MATLAB的认识更加深入,也对数字图像处理常见的几种图像处理方法有了更深的了解,学习到了更多。文章来源地址https://www.toymoban.com/news/detail-770814.html

参考文献

  1. https://zhuanlan.zhihu.com/p/398812239.
  2. http://t.csdn.cn/UgTie
  3. http://t.csdn.cn/1jZ9A
  4. 陈颖,荆树旭,石剑等.基于多尺度笔刷的分层油画风格化[J].计算机辅助设计与图形学学报,2020,32(04):575-581.
  5. https://blog.csdn.net/qq_42758098/article/details
  6. 李智慧,范铁生,唐春鸽等.具有层次素描纹理的素描画绘制方法[J].计算机应用,2012,32(10):2851-2854.

附录全部代码

function imageProcessingGUI()
    % 创建GUI窗口
    fig = figure('Name', '图像处理工具','Position', [200, 200, 1000, 500]);
    % 创建轴并设置背景图像
%     axesHandle = axes('Units', 'pixels', 'Position', [0, 0, 1000, 500]);
%    backgroundImage = imread('背景.jpg'); % 替换为实际的背景图像文件
%     imagesc(backgroundImage);
%     set(axesHandle, 'Visible', 'off'); % 隐藏轴边框和刻度

    % 创建个人创作信息文本标签
%     infoText = uicontrol('Style', 'text', 'Position', [50, 450, 250, 20], 'HorizontalAlignment', 'left', 'String', ' 1', 'FontSize', 14);

     % 创建按钮
    mohuButton = uicontrol('Style', 'pushbutton', 'String', '图像模糊', 'Position', [50, 350, 100, 30], 'Callback', @processImage);
    ruihuaButton = uicontrol('Style', 'pushbutton', 'String', '图像锐化', 'Position', [200, 350, 100, 30], 'Callback', @processImage);
    fudiaoButton = uicontrol('Style', 'pushbutton', 'String', '图像浮雕样式', 'Position', [50, 300, 100, 30], 'Callback', @processImage);
    sumiaoButton = uicontrol('Style', 'pushbutton', 'String', '图像素描', 'Position', [500, 350, 100, 30], 'Callback', @processImage);
    fanseButton = uicontrol('Style', 'pushbutton', 'String', '图像反色', 'Position', [650, 350, 100, 30], 'Callback', @processImage);
    wuhuaButton = uicontrol('Style', 'pushbutton', 'String', '图像雾化', 'Position', [800, 350, 100, 30], 'Callback', @processImage);
    junhenButton = uicontrol('Style', 'pushbutton', 'String', 'BBHE直方图均衡化', 'Position', [350, 350, 100, 30], 'Callback', @processImage);
    edgeButton = uicontrol('Style', 'pushbutton', 'String', 'canny边缘检测', 'Position', [200, 300, 100, 30], 'Callback', @processImage);
    pengzhangButton = uicontrol('Style', 'pushbutton', 'String', '图像膨胀', 'Position', [350, 300, 100, 30], 'Callback', @processImage);
    fushiButton = uicontrol('Style', 'pushbutton', 'String', '图像腐蚀', 'Position', [500, 300, 100, 30], 'Callback', @processImage);
    youhuaButton = uicontrol('Style', 'pushbutton', 'String', '图像油画', 'Position', [650, 300, 100, 30], 'Callback', @processImage);
    dongmanButton = uicontrol('Style', 'pushbutton', 'String', '图像动漫化', 'Position', [800, 300, 100, 30], 'Callback', @processImage);
     % 创建保存图像按钮
     saveButton = uicontrol('Style', 'pushbutton', 'String', '保存图像', 'Position', [200, 400, 100, 40], 'Callback', @saveImage);
    selectButton = uicontrol('Style', 'pushbutton', 'String', '选择图像', 'Position', [50, 400, 100, 40], 'Callback', @selectImage);
     % 选择的图像
    image = [];
    processedImage = [];
    % 创建图像显示区域
   
    axesHandle1 = axes('Units', 'pixels', 'Position', [50, 50, 300, 200],'Box', 'off');
    axesHandle2 = axes('Units', 'pixels', 'Position', [550, 50, 300, 200],'Box', 'off');
     axis(axesHandle1, 'off');
     axis(axesHandle2, 'off');

   % 创建方框
    rectanglePosition1 = [0.1, 0.1, 0.2, 0.40]; % 根据需要调整方框的位置和大小
    rectanglePosition2 = [0.6, 0.1, 0.2, 0.4]; % 根据需要调整方框的位置和大小
    annotation('rectangle', 'Position', rectanglePosition1, 'Color', 'k', 'LineWidth', 2);
    annotation('rectangle', 'Position', rectanglePosition2, 'Color', 'k', 'LineWidth', 2);
    % 保存图像回调函数
    function saveImage(~, ~)
        if isempty(processedImage)
            return;
        end
        [filename, path] = uiputfile({'*.jpg', 'JPEG 图像文件 (*.jpg)'; '*.png', 'PNG 图像文件 (*.png)'; '*.bmp', 'BMP 图像文件 (*.bmp)'}, '保存图像文件');
        if isequal(filename, 0) || isequal(path, 0)
            return;
        end
            savePath = fullfile(path, filename);
        try
            imwrite(processedImage, savePath);
            msgbox('图像保存成功!', '保存成功');
        catch
            errordlg('保存图像失败!', '保存失败');
        end
    end



        % 选择图像回调函数
    function selectImage(~, ~)
        % 选择要处理的图像
        [filename, path] = uigetfile({'*.jpg;*.png;*.bmp', '图像文件 (*.jpg, *.png, *.bmp)'}, '选择图像文件');
        if isequal(filename, 0) || isequal(path, 0)
            return;
        end

  % 读取图像
        image = imread(fullfile(path, filename));

        % 显示原始图像
        imshow(image, 'Parent', axesHandle1);
%         title('原始图像');
    end
    
       % 图像处理回调函数
    function processImage(source, ~)
        % 获取按钮的标签
        tag = source.String;
        
         % 调用相应的图像处理函数
        switch tag
            case '图像模糊'
                radius = 5; % 模糊半径
                processedImage = mohuImage(image, radius);
            case '图像锐化'
                amount = 10; % 锐化程度
                processedImage = ruihuaImage(image, amount);
            case '图像浮雕样式'
                processedImage = fudiaoImage(image);
            case '图像素描'
                processedImage = sumiaoImage(image);
            case '图像反色'
                processedImage = fanseImage(image);
            case '图像雾化'
                amount = 0.2; % 雾化程度
                processedImage = addwuhua(image, amount);
            case 'BBHE直方图均衡化'
                processedImage = junhengImage(image);
            case 'canny边缘检测'
                processedImage = Edge(image);
            case '图像膨胀'
                processedImage = pengzhangImage(image);
            case '图像腐蚀'
                processedImage = fushiImage(image);
            case '图像油画'
                brushSize = 5; % 刷子尺寸
                intensity = 1; % 油画强度
                processedImage = youhua(image, brushSize, intensity);
           case '图像动漫化'
                processedImage = dongmanImage(image);

          end
        
         % 显示处理前的图像
        axes(axesHandle1);
        imshow(image);
        title('原始图像');
        
        % 显示处理后的图像
        axes(axesHandle2);
        imshow(processedImage);
        title(axesHandle2, tag);
        
    end

    % 图像模糊函数
    function mohuImage = mohuImage(image, radius)
        h = fspecial('disk', radius);
        mohuImage = imfilter(image, h, 'replicate');
    end

    % 图像锐化函数
    function ruihuaImage = ruihuaImage(image, amount)
        blurredImage = imgaussfilt(image, 2);
        mask = image - blurredImage;
        ruihuaImage = image + amount * mask;
        ruihuaImage = uint8(max(0, min(ruihuaImage, 255)));
    end

    % 图像浮雕样式函数
 function fudiaoImage = fudiaoImage(image)
    % 增加浮雕滤波器的强度和锐化效果
    filter = [0 1 0; 1 -4 1; 0 1 0];
    fudiaoImage = imfilter(image, filter, 'replicate', 'conv');
    fudiaoImage = uint8(fudiaoImage + 160); % 调整浮雕图像的亮度
end


function sumiaoImage = sumiaoImage(image)
    image = double(image) / 255; %并归一化
    imageCopy = image; % 创建一个与输入图像相同的副本
    halfSize = 20; % 定义高斯滤波器的尺寸和标准差
    filterSize = 2 * halfSize + 1;
    sigma = filterSize / 6;
    gaussianFilter = fspecial('gaussian', filterSize, sigma); 
    filteredImage = imfilter(imageCopy, gaussianFilter, 'conv'); % 使用高斯滤波器对图像进行模糊处理
    imageDiff = image - filteredImage; % 计算输入图像和模糊后的图像的差值
    imageOut = imageDiff + 0.5; % 将差值图像偏移0.5
    result = im2bw(imageOut, 0.48); % 将偏移后的图像转换为二值图像
    r = im2double(result); 
    g = im2double(result);
    b = im2double(result);
    sumiaoImage = cat(3, r, g, b); 
end
    % 图像反色函数
    function fanseImage = fanseImage(image)
        fanseImage = 255 - image;
    end

    % 图像雾化函数
   function wuhuaImage = addwuhua(image, amount)
    noise = randn(size(image)) * 64;
    wuhuaImage = double(image) + amount * noise;
    wuhuaImage = uint8(max(0, min(wuhuaImage, 255)));
    end

function junhengimage = junhengImage(image)
    I = image; % 读取图像
    Ir = I(:, :, 1); % 提取红色分量
    Ig = I(:, :, 2); % 提取绿色分量
    Ib = I(:, :, 3); % 提取蓝色分量

    % 调用 BBHE() 进行各分量图像增强
    I1 = BBHE(Ir);
    I2 = BBHE(Ig);
    I3 = BBHE(Ib);

    In = cat(3, I1, I2, I3); % 构造多维数组

    junhengimage = In; % 返回增强后的图像

    function A = BBHE(I)
        Xm = floor(mean2(I)); % 求图像灰度均值 Xm
        Xmin = min(I(:)); % 最小灰度值
        Xmax = max(I(:)); % 最大灰度值
        [m, n] = size(I); % 获取图像大小
        nl = sum(I(:) <= Xm); % 统计小于等于平均值的各级灰度值数量
        nu = sum(I(:) > Xm); % 统计大于平均值的各级灰度值数量
        Xl = histcounts(I(I <= Xm), Xmin:Xm+1);
        Xu = histcounts(I(I > Xm), Xm:Xmax+1); % 使用 histcounts 函数进行迭代统计
        Pl = Xl ./ nl;  % 记录对应各级灰度值的概率密度
        Pu = Xu ./ nu;
        Cl = cumsum(Pl); % 累计密度函数
        Cu = cumsum(Pu);
        fl = double(Xmin) + Cl .* (double(Xm) - double(Xmin));
        fu = double(Xm + 1) + Cu .* (double(Xmax) - double(Xm + 1));
        I_equal = I;
        lower_indices = I <= Xm;
        higher_indices = I > Xm;
        I_equal(lower_indices) = fl(I(lower_indices) - Xmin + 1);
        I_equal(higher_indices) = fu(I(higher_indices) - (Xm + 1) + 1);
        A = I_equal; % 返回均衡化后的灰度图像
    end
end





    % 图像边缘检测函数
    function edgeImage = Edge(image)
        grayscaleImage = rgb2gray(image);
        edgeImage = edge(grayscaleImage, 'Canny');
    end

   
    % 图像膨胀函数
    function pengzhangImage = pengzhangImage(image)
        se = strel('disk', 5);
        pengzhangImage = imdilate(image, se);
    end

    % 图像腐蚀函数
    function fushiImage = fushiImage(image)
        se = strel('disk', 5);
        fushiImage = imerode(image, se);
    end

end

function youhuaImage = youhua(image, brushSize, intensity)
    [width, height, ~] = size(image);
    youhuaImage = uint8(zeros(width, height, 3));
    grayImage = rgb2gray(image);
    intensityLevel = 180;
    scaledImage = floor(double(grayImage) * (intensityLevel / 255)); % 缩放灰度图像的像素
    for x = 1:width % 遍历图像的每个像素点
        for y = 1:height
            intensityCounter = zeros(1, intensityLevel + 1);
            colorR = zeros(1, intensityLevel + 1);
            colorG = zeros(1, intensityLevel + 1);
            colorB = zeros(1, intensityLevel + 1);
            for i = (x - brushSize):(x + brushSize) % 遍历当前像素点的邻域
                for j = (y - brushSize):(y + brushSize)% 检查邻域内的像素是否在图像范围内
                    if i > 0 && i <= width && j > 0 && j <= height  % 获取当前像素的灰度值
                        intensity = scaledImage(i, j) + 1;% 更新计数器和颜色向量
                        intensityCounter(intensity) = intensityCounter(intensity) + 1;
                        colorR(intensity) = image(i, j, 1);
                        colorG(intensity) = image(i, j, 2);
                        colorB(intensity) = image(i, j, 3);
                    end
                end
            end
            [~, index] = max(intensityCounter);  % 找到出现次数最多的灰度值
            youhuaImage(x, y, 1) = colorR(index); % 更新输出图像的像素值
            youhuaImage(x, y, 2) = colorG(index);
            youhuaImage(x, y, 3) = colorB(index);
        end
    end
end
% 图像动漫化函数
function dongmanImage = dongmanImage(image)
    dongmanImage = imbilatfilt(image,100,20); %双边滤波
    ed_img = 1-edge((rgb2gray(image)),'canny',[0.07,0.1]); %边缘提取
    dongmanImage  = dongmanImage .*(uint8(repmat(ed_img,[1,1,3]))); %合并
end


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

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

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

相关文章

  • 数字图像处理实验之Matlab对图像的基本处理

    1、提取Lena图像的左半上角部分,与原始Lena图像在同一个figure中显示,并做适当命名 效果图 2、利用 imnoise , 对原始Lena图像叠加高斯噪声,产生4幅、14幅、140幅的含噪图像。对这些含噪图像采用 相加  运算,来验证、比较图像相加消除叠加性噪声的效果。将原始图像、1幅噪

    2024年02月03日
    浏览(64)
  • 数字图像处理 关于matlab的图像变换

    熟悉及掌握图像的傅里叶变换、离散余弦变化原理及性质,实现图像的频率域变换。 1. 读入一幅图像,分别为图像添加叠加密度为0.04的椒盐噪声,均值为0方差为0.02的高斯噪声,做FFT变换。将原始图像、原始图像频谱图、添加噪声后的图像,以及噪声图像的频谱图同时显示出

    2024年02月05日
    浏览(55)
  • 数字图像处理之matlab实验(五):形态学图像处理

    常见的形态学处理包括腐蚀、膨胀、开运算、闭运算。不同的操作有不同的作用,同样的操作在不同类型的图片上也有不同效果,具体效果如下表格所示。要求熟练掌握对二值图像的形态学处理。 不同操作对不同类型图像处理效果 一、对二值图像进行处理 1、结构元素 在开

    2024年02月04日
    浏览(65)
  • 数字图像处理之matlab大作业:自制图像处理小工具

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

    2024年02月10日
    浏览(46)
  • 【数字图像处理】实验三 图像分割(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图 (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)尝试不同的阈值选择方法,实现灰度图像二值化 (2)变换参数实现形态学滤波,查看滤波

    2024年02月05日
    浏览(51)
  • 【数字图像处理】实验二 图像增强(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图  (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实验要求 (1)对以上处理变换参数,查看处理效果; (2)更改伪彩色增强方法为热金属编码或彩

    2023年04月12日
    浏览(86)
  • 【数字图像处理】实验(2)——图像增强(MATLAB实现)

    (1)进一步掌握图像处理工具Matlab,熟悉基于Matlab的图像处理函数。 (2)掌握各种图像增强方法。 1.打开一幅彩色图像Image1,使用Matlab图像处理函数,对其进行下列变换: (1)将Image1灰度化为gray,统计并显示其灰度直方图; (2)对gray进行分段线性变换; (3)对gray进行

    2023年04月23日
    浏览(57)
  • matlab数字图像处理——图像的读写,灰度、二值图像

    一、实验目的 1.结合数字图像处理的知识,直观感受图像处理的基本实现过程 2.熟悉MATLAB工具的使用 3.了解图像的读写和显示 二、实验内容 实验内容一:图像读取 (1)利用编程实现读取图像 利用imread读取文件夹images中的图像;查看读取到的图像数据矩阵,对比灰度图像、

    2024年02月07日
    浏览(58)
  • 【学生作业】数字图像处理之MATLAB大作业:自制图像处理小工具

      本文为一个刚入门 MATLAB 的学生所写,内容是使用 APP Designer 做一个 GUI 界面的图像处理的小工具。还有很多不足,欢迎批评指正。   APP Designer 学习教程指路👉MATLAB App Designer基础教程Matlab GUI界面设计   作业要求指路👉数字图像处理之matlab大作业:自制图像处理小工

    2024年02月11日
    浏览(47)
  • 数字图像处理之matlab常见函数

    作用:读取图像 作用:彩色图像转化为灰度图像 作用:显示图片对应的直方图 作用:展示图片 作用:传入两个参数,功能为对图片进行均衡化处理 作用:将图片的数据类型转化为双精度浮点数 注意: 补充重点 ,如果我们对图像进行了转double的处理,然后用imshow(具体图片

    2024年02月09日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包