《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-朋友圈爆款:用MATLAB给照片加智能滤镜

《MATLAB实战训练营:从入门到工业级应用》趣味入门篇-朋友圈爆款:用MATLAB给照片加智能滤镜 📸✨

大家好!今天我要教大家用MATLAB打造朋友圈爆款照片的终极秘籍!不需要Photoshop,不用下载各种滤镜APP,只需几行代码,你就能让普通照片秒变艺术大片!🎨 准备好惊艳你的朋友圈了吗?Let’s go! 🚀

准备工作 🛠️

首先,确保你安装了MATLAB 2016b(版本很重要哦,因为不同版本函数可能有差异)。我们将使用MATLAB强大的图像处理工具箱,这个版本已经包含了我们需要的所有功能。

% 检查是否安装了图像处理工具箱
if ~license('test', 'image_toolbox')
    error('需要安装Image Processing Toolbox才能运行此代码');
end

在这里插入图片描述

第一步:读取并显示图片 📂

让我们先从简单的开始 - 读取一张图片并显示它。你可以使用自己的照片,或者用MATLAB自带的示例图片。

% 方法1:使用你自己的图片
% [filename, pathname] = uigetfile({'*.jpg;*.png;*.bmp'}, '选择一张图片');
% img = imread(fullfile(pathname, filename));

% 方法2:使用MATLAB示例图片
img = imread('peppers.png');

% 显示原始图片
figure('Name', '原始图片', 'NumberTitle', 'off');
imshow(img);
title('原始图片');

在这里插入图片描述

第二步:基础滤镜 - 黑白效果 ⚫⚪

让我们从最简单的黑白滤镜开始。MATLAB提供了多种将彩色图像转换为灰度图像的方法。

% 方法1:使用rgb2gray函数(最简单)
gray_img = rgb2gray(img);

% 方法2:手动加权平均(可以调整权重获得不同效果)
% gray_img = 0.2989 * img(:,:,1) + 0.5870 * img(:,:,2) + 0.1140 * img(:,:,3);
% gray_img = uint8(gray_img);

% 显示黑白图片
figure('Name', '黑白滤镜', 'NumberTitle', 'off');
imshow(gray_img);
title('经典黑白滤镜 ⚫⚪');

在这里插入图片描述

第三步:复古滤镜 🕰️

复古滤镜是朋友圈的常青树!让我们用MATLAB打造一个温暖的复古效果。

% 分离RGB通道
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);

% 调整各通道颜色值
R = min(R + 50, 255);  % 增加红色调
G = min(G + 20, 255);  % 稍微增加绿色
B = max(B - 30, 0);    % 减少蓝色调

% 合并通道
vintage_img = cat(3, R, G, B);

% 添加轻微模糊效果模拟老照片
vintage_img = imgaussfilt(vintage_img, 0.5);

% 显示复古滤镜效果
figure('Name', '复古滤镜', 'NumberTitle', 'off');
imshow(vintage_img);
title('温暖复古滤镜');

在这里插入图片描述

第四步:素描效果 ✏️

把照片变成素描是展示你"艺术才华"的好方法!MATLAB可以轻松实现这种效果。

%% 素描效果 
[VG,A,PPG] = colorgrad(img);  
ppg = im2uint8(PPG);  
ppgf = 255 - ppg;  
[M,N] = size(ppgf);T=200;  
ppgf1 = zeros(M,N);  
for ii = 1:M  
    for jj = 1:N  
        if ppgf(ii,jj)<T  
            ppgf1(ii,jj)=0;  
        else  
            ppgf1(ii,jj)=235/(255-T)*(ppgf(ii,jj)-T);  
        end  
    end  
end  
ppgf1 = uint8(ppgf1);  
figure;  
subplot(221);imshow(ppgf);  
subplot(222);imshow(ppgf1);  
subplot(223);imhist(ppgf);  
subplot(224);imhist(ppgf1);  
   
figure;imshow(ppgf1);  
title('艺术素描效果');
%% 素描函数
function [VG, A, PPG] = colorgrad(f, T)  
    if (ndims(f)~=3) || (size(f,3)~=3)  
        error('Input image must be RGB');  
    end  
    sh = fspecial('sobel');  
    sv = sh';  
    Rx = imfilter(double(f(:,:,1)), sh, 'replicate');  
    Ry = imfilter(double(f(:,:,1)), sv, 'replicate');  
    Gx = imfilter(double(f(:,:,2)), sh, 'replicate');  
    Gy = imfilter(double(f(:,:,2)), sv, 'replicate');  
    Bx = imfilter(double(f(:,:,3)), sh, 'replicate');  
    By = imfilter(double(f(:,:,3)), sv, 'replicate');  

    gxx = Rx.^2 + Gx.^2 + Bx.^2;  
    gyy = Ry.^2 + Gy.^2 + By.^2;  
    gxy = Rx.*Ry + Gx.*Gy + Bx.*By;  
    A = 0.5*(atan(2*gxy./(gxx-gyy+eps)));  
    G1 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(2*A) + 2*gxy.*sin(2*A));  

    A = A + pi/2;  
    G2 = 0.5*((gxx+gyy) + (gxx-gyy).*cos(2*A) + 2*gxy.*sin(2*A));  
    G1 = G1.^0.5;  
    G2 = G2.^0.5;  
    VG = mat2gray(max(G1, G2));  

    RG = sqrt(Rx.^2 + Ry.^2);  
    GG = sqrt(Gx.^2 + Gy.^2);  
    BG = sqrt(Bx.^2 + By.^2);  

    PPG = mat2gray(RG + GG + BG);  

    if nargin ==2  
        VG = (VG>T).*VG;  
        PPG = (PPG>T).*PPG;  
    end 
end

在这里插入图片描述
在这里插入图片描述

第五步:高级智能滤镜 - 自适应美化 🧠

现在来点高级的!我们将创建一个智能滤镜,它能自动分析图像并应用最佳美化参数。

clc
close all

img = imread('peppers.png');

%% 应用智能美化滤镜
smart_img = smartBeautify(img);

% 显示智能美化效果
figure('Name', '智能美化滤镜', 'NumberTitle', 'off');
imshow(smart_img);
title('自适应智能美化滤镜');

%% 应用白平衡
balanced_img = autoWhiteBalance(img);

% 显示白平衡效果
figure('Name', '白平衡效果', 'NumberTitle', 'off');
imshow(balanced_img);
title('白平衡效果');


%% 智能美化函数
function enhanced_img = smartBeautify(img)
    % 1. 自动白平衡
    img = autoWhiteBalance(img);
    
    % 2. 自适应对比度增强
    img = imadjust(img, stretchlim(img, [0.01, 0.99]), []);
    
    % 3. 智能锐化 (基于图像内容)
    if std2(rgb2gray(img)) < 20  % 低对比度图像需要更多锐化
        img = imsharpen(img, 'Radius', 1.5, 'Amount', 1.2);
    else
        img = imsharpen(img, 'Radius', 1, 'Amount', 0.8);
    end
    
    % 4. 肤色增强 (如果检测到人脸)
    faceDetector = vision.CascadeObjectDetector();
    bbox = step(faceDetector, img);
    
    if ~isempty(bbox)
        % 提取人脸区域
        for i = 1:size(bbox, 1)
            face = img(bbox(i,2):bbox(i,2)+bbox(i,4), bbox(i,1):bbox(i,1)+bbox(i,3), :);
            
            % 转换到HSV空间调整肤色
            face_hsv = rgb2hsv(face);
            hue = face_hsv(:,:,1);
            mask = (hue > 0.05) & (hue < 0.15);  % 肤色范围
            
            % 调整饱和度和亮度
            face_hsv(:,:,2) = face_hsv(:,:,2) * 1.2;  % 增加饱和度
            face_hsv(:,:,3) = face_hsv(:,:,3) * 1.1;  % 增加亮度
            
            % 转换回RGB
            face_rgb = hsv2rgb(face_hsv);
            
            % 混合回原图
            img(bbox(i,2):bbox(i,2)+bbox(i,4), bbox(i,1):bbox(i,1)+bbox(i,3), :) = face_rgb;
        end
    end
    
    enhanced_img = img;
end

% 自动白平衡函数
function balanced_img = autoWhiteBalance(img)
    % 转换为LAB颜色空间
    lab_img = rgb2lab(img);
    
    % 计算A和B通道的平均值
    avg_a = mean2(lab_img(:,:,2));
    avg_b = mean2(lab_img(:,:,3));
    
    % 调整A和B通道
    lab_img(:,:,2) = lab_img(:,:,2) - (avg_a * 0.7);  % 调整系数可改变效果
    lab_img(:,:,3) = lab_img(:,:,3) - (avg_b * 0.7);
    
    % 转换回RGB
    balanced_img = lab2rgb(lab_img);
end

在这里插入图片描述
在这里插入图片描述

第六步:批量处理与保存 💾

学会了各种滤镜后,你可能想批量处理多张照片并保存结果。MATLAB也能轻松搞定!

% 选择多个文件
[filenames, pathname] = uigetfile({'*.jpg;*.png;*.bmp'}, '选择多张图片', 'MultiSelect', 'on');

if ischar(filenames)
    filenames = {filenames};  % 如果只选了一个文件,转换为cell数组
end

% 创建输出目录
output_dir = fullfile(pathname, 'filtered_images');
if ~exist(output_dir, 'dir')
    mkdir(output_dir);
end

% 处理每张图片
for i = 1:length(filenames)
    % 读取图片
    img = imread(fullfile(pathname, filenames{i}));
    
    % 应用滤镜 (这里使用智能美化滤镜作为示例)
    filtered_img = smartBeautify(img);
    
    % 保存结果
    [~, name, ext] = fileparts(filenames{i});
    output_filename = fullfile(output_dir, [name '_filtered' ext]);
    imwrite(filtered_img, output_filename);
    
    fprintf('已处理并保存: %s\n', output_filename);
end

disp('所有图片处理完成! 🎉');

进阶技巧:创建你自己的滤镜 🧪

现在你已经掌握了基础,是时候发挥创造力,设计属于你自己的独特滤镜了!

% 自定义滤镜示例:梦幻发光效果
function dreamy_img = dreamyFilter(img)
    % 转换为HSV颜色空间
    hsv_img = rgb2hsv(img);
    
    % 调整色调 (创造梦幻色彩偏移)
    hsv_img(:,:,1) = mod(hsv_img(:,:,1) + 0.05, 1);  % 色调偏移
    
    % 增加饱和度
    hsv_img(:,:,2) = min(hsv_img(:,:,2) * 1.3, 1);
    
    % 降低对比度并提高亮度 (创造柔和的发光效果)
    hsv_img(:,:,3) = imadjust(hsv_img(:,:,3), [0.2 0.8], [0.3 1]);
    
    % 转换回RGB
    dreamy_img = hsv2rgb(hsv_img);
    
    % 添加发光效果
    blur_radius = min(size(img,1), size(img,2)) / 200;
    blurred = imgaussfilt(dreamy_img, blur_radius);
    dreamy_img = imlincomb(0.7, dreamy_img, 0.3, blurred);
    
    % 添加轻微噪点模拟胶片质感
    noise = randn(size(dreamy_img)) * 0.02;
    dreamy_img = dreamy_img + noise;
    dreamy_img = min(max(dreamy_img, 0), 1);  % 限制在0-1范围内
end

% 应用自定义滤镜
custom_img = dreamyFilter(img);

% 显示自定义滤镜效果
figure('Name', '自定义梦幻滤镜', 'NumberTitle', 'off');
imshow(custom_img);
title('自定义梦幻滤镜 ✨');

总结 🏁

今天我们学习了用MATLAB实现多种炫酷的图片滤镜:

  1. 基础黑白滤镜 ⚫⚪
  2. 温暖复古滤镜 🕰️
  3. 艺术素描效果 ✏️
  4. 自适应智能美化 🧠
  5. 批量处理技巧 💾
  6. 自定义滤镜设计 🧪

现在你已经掌握了让照片在朋友圈脱颖而出的秘密武器!🎯 快去试试这些代码,打造属于你的独特风格吧!

小挑战:尝试组合不同的滤镜效果,或者调整参数创造出全新的滤镜!在评论区分享你的作品和参数设置吧!👇


希望这篇教程对你有所帮助!如果有任何问题或者想要了解更多MATLAB图像处理技巧,欢迎留言讨论。别忘了点赞收藏哦!👍💖

Happy coding! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

passionSnail

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值