《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实现多种炫酷的图片滤镜:
- 基础黑白滤镜 ⚫⚪
- 温暖复古滤镜 🕰️
- 艺术素描效果 ✏️
- 自适应智能美化 🧠
- 批量处理技巧 💾
- 自定义滤镜设计 🧪
现在你已经掌握了让照片在朋友圈脱颖而出的秘密武器!🎯 快去试试这些代码,打造属于你的独特风格吧!
小挑战:尝试组合不同的滤镜效果,或者调整参数创造出全新的滤镜!在评论区分享你的作品和参数设置吧!👇
希望这篇教程对你有所帮助!如果有任何问题或者想要了解更多MATLAB图像处理技巧,欢迎留言讨论。别忘了点赞收藏哦!👍💖
Happy coding! 🚀