数字图像处理之matlab大作业:美图秀秀

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

1、放大缩小

从变量上看,图片是放大缩小了,但显示出来有点问题,应该是显示设置的原因。缩小的这张图不就是马赛克么~ 

数字图像处理之matlab大作业:美图秀秀

clear,clc,close all;
Image=im2double(imread('lisa.jpg'));
subplot(1,3,1),imshow(Image,'InitialMagnification');
NewImage1=imresize(Image,[40,40]); 
NewImage2=imresize(Image,[6000,6000]);
subplot(1,3,2),imshow(NewImage1,'InitialMagnification');
subplot(1,3,3),imshow(NewImage2,'InitialMagnification');

2、翻转和旋转

数字图像处理之matlab大作业:美图秀秀

Image2=imread('lisa.jpg');
HImage=flipdim(Image2,2);
VImage=flipdim(Image2,1);
CImage=flipdim(HImage,1);
subplot(221),imshow(Image2);
subplot(222),imshow(HImage);
subplot(223),imshow(VImage);
subplot(224),imshow(CImage);

数字图像处理之matlab大作业:美图秀秀  

Image=im2double(imread('lisa.jpg'));
NewImage1=imrotate(Image,15);
NewImage2=imrotate(Image,40,'bilinear');
subplot(1,2,1),imshow(NewImage1);
subplot(1,2,2),imshow(NewImage2);
imwrite(NewImage1,'rotate11.jpg');
imwrite(NewImage2,'rotate12.jpg');

3、图像剪切 

数字图像处理之matlab大作业:美图秀秀

[I,map]=imread('lisa.jpg');
figure;
subplot(121);imshow(I,map);
%指定剪切区域的大小和位置,剪切,返回xy坐标和裁剪区域
[x,y,I2,rect]=imcrop(I,map,[100 200 40 40]);%位置和区域大小
subplot(122);imshow(I2);
 

4、图像增强(提高对比度)

数字图像处理之matlab大作业:美图秀秀

picture=imread("lisa.jpg");
picture1=histeq(picture);
figure;
subplot(121);
imshow(picture);
subplot(122);
imshow(picture1);
figure;
subplot(121);
imhist(picture);
subplot(122);
imhist(picture1);

5、磨皮

数字图像处理之matlab大作业:美图秀秀

noisyImg=imread('tina.jpg');
r=10;
level=5;
sigma=10+level^2;
dnImg=denoiseBasedLocalStat(noisyImg,r,sigma);
figure,imshow(noisyImg);
figure,imshow(dnImg);
mask=faceMask(noisyImg,5);
figure,imshow(mask);
w=0.5;
mergedImg=uint8(double(noisyImg).*(1-w*mask)+w*double(dnImg).*mask);
figure,imshow(mergedImg);
function dnImg = denoiseBasedLocalStat(img,r,sigma)
% 基于局部统计信息的图像滤波去噪
if size(img,3)==1
    img=double(img);
    dnImg=denoiseBasedLocalStat_gray(img,r,sigma);
    dnImg=uint8(dnImg);
end
if size(img,3)==3
    ycc=rgb2ycbcr(img);
    y=ycc(:,:,1);
    dnY=denoiseBasedLocalStat_gray(double(y),r,sigma);
    ycc(:,:,1)=uint8(dnY);
    dnImg=ycbcr2rgb(ycc);
end
end
 
function dnImg=denoiseBasedLocalStat_gray(img,r,sigma)
% 基于局部统计信息的灰度图像滤波去噪
dnImg=zeros(size(img));
img=double(img);
paddedImg=padarray(img,[r,r],'symmetric','both');
[Yim,YYim]=intergalMap(paddedImg);
for i=r+1:size(paddedImg,1)-r
    for j=r+1:size(paddedImg,2)-r
        rectSum=Yim(i+r+1,j+r+1)+Yim(i-r,j-r)-Yim(i-r,j+r+1)-Yim(i+r+1,j-r);
        rectSquareSum=YYim(i+r+1,j+r+1)+YYim(i-r,j-r)-YYim(i-r,j+r+1)-YYim(i+r+1,j-r);
        num=(2*r+1)^2;
        avg=rectSum/num;
        var=rectSquareSum/num-avg^2;
        k=var/(var+sigma^2);
        dnImg(i-r,j-r)=(1-k)*avg+k*img(i-r,j-r);
    end
end
end
 
function [Yim,YYim]=intergalMap(img)
% 生成积分图
paddedImg=padarray(img,[1 1],0,'pre');
Yim=zeros(size(paddedImg));
YYim=Yim;
for i=2:size(paddedImg,1)
    for j=2:size(paddedImg,2)
        Yim(i,j)=Yim(i,j-1)+Yim(i-1,j)-Yim(i-1,j-1)+paddedImg(i,j);
        YYim(i,j)=YYim(i,j-1)+YYim(i-1,j)-YYim(i-1,j-1)+paddedImg(i,j)^2;
    end
end
end
 
function mask=faceMask(img,r)
% 人脸掩模
mask=zeros(size(img,1),size(img,2));
mask(img(:,:,1)>20 & img(:,:,2)>40 & img(:,:,3)>50)=1;
mask=myBoxFilt(mask,r);
mask=mask(:,:,ones(1,3));
end
 
function fImg=myBoxFilt(img,r)
% 盒式滤波
paddedImg=padarray(img,[r r],'symmetric','both');
[Yim,~]=intergalMap(paddedImg);
for i=r+1:size(paddedImg,1)-r
    for j=r+1:size(paddedImg,2)-r
        rectSum=Yim(i+r+1,j+r+1)+Yim(i-r,j-r)-Yim(i-r,j+r+1)-Yim(i+r+1,j-r);
        avg=rectSum/(2*r+1)^2;
        fImg(i-r,j-r)=avg;
    end
end
end

6、美白

参考:【数字图像处理】实验(3)——图像综合应用:皮肤美化(MATLAB实现)_虚神公子的博客-CSDN博客_matlab图像美颜

这部分的代码也同时实现了磨皮的功效,感觉前后两个功能差不多,但实现方式不一样。 

数字图像处理之matlab大作业:美图秀秀

clear,clc,close all;
ImageOrigin=im2double(imread('tina.jpg'));
figure,imshow(ImageOrigin),title('原图');
DBImage=DBfilt(ImageOrigin);                 %双边滤波

SkinImage1=FirstFilter(ImageOrigin);            %%初步过滤
SkinArea=SecondFilter(SkinImage1);           %%YCgCr空间范围肤色检测

SkinFuse=Fuse(ImageOrigin,DBImage,SkinArea);%图像融合
SkinBeautify=Sharp(SkinFuse);               %图像锐化

Meibai=MB(SkinBeautify);

%2.图像平滑
function Out=DBfilt(In)
    [height,width,c] = size(In); 
    win=15;       % 定义双边滤波窗口宽度  
    sigma_s=6; sigma_r=0.1; % 双边滤波的两个标准差参数  
    [X,Y] = meshgrid(-win:win,-win:win); 
    Gs = exp(-(X.^2+Y.^2)/(2*sigma_s^2));%计算邻域内的空间权值    
    Out=zeros(height,width,c); 
    for k=1:c
        for j=1:height    
            for i=1:width  
                temp=In(max(j-win,1):min(j+win,height),max(i-win,1):min(i+win,width),k);
                Gr = exp(-(temp-In(j,i,k)).^2/(2*sigma_r^2));%计算灰度邻近权值        
                % W为空间权值Gs和灰度权值Gr的乘积       
                W = Gr.*Gs((max(j-win,1):min(j+win,height))-j+win+1,(max(i-win,1):min(i+win,width))-i+win+1);      
                Out(j,i,k)=sum(W(:).*temp(:))/sum(W(:));            
            end
        end  
    end
    figure,imshow(Out),title('双边滤波');
end
%3.皮肤区域分割
%3.1基于RGB空间的非肤色像素初步过滤
function Out=FirstFilter(In)
    Out=In;
    [height,width,c] = size(In); 
    IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);
    for j=1:height
        for i=1:width
            if (IR(j,i)<160/255 && IG(j,i)<160/255 && IB(j,i)<160) && (IR(j,i)>IG(j,i) && IG(j,i)>IB(j,i))
                Out(j,i,:)=0;
            end
            if IR(j,i)+IG(j,i)>500/255
                Out(j,i,:)=0;
            end
            if IR(j,i)<70/255 && IG(j,i)<40/255 && IB(j,i)<20/255
                Out(j,i,:)=0;
            end
        end
    end
 
    figure,imshow(Out);title('非肤色初步过滤'); 
end
%3.2基于YCgCr空间范围肤色分割
function Out=SecondFilter(In)
    IR=In(:,:,1); IG=In(:,:,2);IB=In(:,:,3);       
    [height,width,c] = size(In);
    Out=zeros(height,width);
    for i=1:width
        for j=1:height  
           R=IR(j,i); G=IG(j,i); B=IB(j,i);       
           Cg=(-81.085)*R+(112)*G+(-30.915)*B+128;  
           Cr=(112)*R+(-93.786)*G+(-18.214)*B+128;         
           if Cg>=85 && Cg<=135 && Cr>=-Cg+260 && Cr<=-Cg+280       
               Out(j,i)=1;          
           end
        end
    end
    Out=medfilt2(Out,[3 3]);
    
    figure,imshow(Out),title('YCgCr空间范围肤色检测');    
end
%4.图像融合
function Out=Fuse(ImageOrigin,DBImage,SkinArea)
    Skin=zeros(size(ImageOrigin));
    Skin(:,:,1)=SkinArea;   
    Skin(:,:,2)=SkinArea;  
    Skin(:,:,3)=SkinArea;
    Out=DBImage.*Skin+double(ImageOrigin).*(1-Skin);
    
    figure,imshow(Out);title('肤色与背景图像融合');
end
%5.图像锐化
function Out=Sharp(In)
    H=[0 -1 0;-1 4 -1;0 -1 0]; %Laplacian锐化模板
    Out(:,:,:)=imfilter(In(:,:,:),H); 
    Out=Out/3+In;
%     imwrite(Out,'man4.jpg');
    figure,imshow(Out),title('Laplacia锐化图像');
end
%6.皮肤亮白处理
function Out=MB(SkinBeautify)
    %im = imread('face9.jpg');
Out=rgb2ycbcr(SkinBeautify);%将图片的RGB值转换成YCbCr值%
YY=Out(:,:,1);
Cb=Out(:,:,2);
Cr=Out(:,:,3);
[x y z]=size(SkinBeautify);
tst=zeros(x,y);
Mb=mean(mean(Cb));
Mr=mean(mean(Cr));
%计算Cb、Cr的均方差%
Tb = Cb-Mb;
Tr = Cr-Mr;
Db=sum(sum((Tb).*(Tb)))/(x*y);
Dr=sum(sum((Tr).*(Tr)))/(x*y);
%根据阀值的要求提取出near-white区域的像素点%
cnt=1;    
for i=1:x
    for j=1:y
        b1=Cb(i,j)-(Mb+Db*sign(Mb));
        b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr));
        if (b1<abs(1.5*Db) && b2<abs(1.5*Dr))
           Ciny(cnt)=YY(i,j);
           tst(i,j)=YY(i,j);
           cnt=cnt+1;
        end
    end
end
cnt=cnt-1;
iy=sort(Ciny,'descend');%将提取出的像素点从亮度值大的点到小的点依次排列%
nn=round(cnt/10);
Ciny2(1:nn)=iy(1:nn);%提取出near-white区域中10%的亮度值较大的像素点做参考白点%
%提取出参考白点的RGB三信道的值% 
mn=min(Ciny2);
for i=1:x
    for j=1:y
        if tst(i,j)<mn
           tst(i,j)=0;
        else
           tst(i,j)=1;
        end
    end
end
R=SkinBeautify(:,:,1);
G=SkinBeautify(:,:,2);
B=SkinBeautify(:,:,3);

R=double(R).*tst;
G=double(G).*tst;
B=double(B).*tst;

%计算参考白点的RGB的均值%
Rav=mean(mean(R));
Gav=mean(mean(G));
Bav=mean(mean(B));

Ymax=double(max(max(YY)))*0.15;%计算出图片的亮度的最大值%
 
%计算出RGB三信道的增益% 
Rgain=Ymax/Rav;
Ggain=Ymax/Gav;
Bgain=Ymax/Bav;

%通过增益调整图片的RGB三信道%
SkinBeautify(:,:,1)=SkinBeautify(:,:,1)*Rgain;
SkinBeautify(:,:,2)=SkinBeautify(:,:,2)*Ggain;
SkinBeautify(:,:,3)=SkinBeautify(:,:,3)*Bgain;

    figure,imshow(Out),title('皮肤美化');
end

7、素描效果

参考:

Matlab编程实现图像滤镜效果(浮雕、怀旧色、连环画、羽化、素描、强光等)_jstlovely的博客-CSDN博客_matlab滤镜代码

 数字图像处理之matlab大作业:美图秀秀

img=imread('lisa.jpg')
img9_gray0= rgb2gray(img);%转为灰度图
img9_gray1 = 255 - img9_gray0;%反色
w = fspecial('gaussian',[5 5],5);%构造一个高斯滤波器
img9_gray2 = imfilter(img9_gray1,w);%高斯模糊
[m,n]=size(img9_gray0)
%模糊后的图像叠加模式选择颜色减淡效果。
for i=1:m
    for j=1:n
        img9(i,j) = uint8(min(uint16(img9_gray0(i,j)) + (uint16(img9_gray0(i,j))*uint16(img9_gray2(i,j))) / (255 - uint16(img9_gray2(i,j))),255));
    end
end
subplot(1,2,1),imshow(img );
subplot(1,2,2),imshow(img9 );

8、羽化

数字图像处理之matlab大作业:美图秀秀

img=imread('lisa.jpg')
img9_gray0= rgb2gray(img);%转为灰度图
[m,n]=size(img9_gray0)
mSize = 0.6;
centerX = n/2;
centerY = m/2;
diff = (centerX*centerX + centerY*centerY) * mSize;
if n>m
    ratio = m/n;
else
    ratio = n/m;
end
for i=1:m
    for j=1:n
        dx = centerX - j;
        dy = centerY - i;
        if n>m
            dx = dx * ratio;
        else
            dy = dy * ratio;
        end
        dstSq = dx * dx + dy * dy;
        
        V = 255 * dstSq / diff;
        img8(i,j,1) = img(i,j,1) + V;
        img8(i,j,2) = img(i,j,2) + V;
        img8(i,j,3) = img(i,j,3) + V;
    end
end
subplot(1,2,1),imshow(img );
subplot(1,2,2),imshow(img8 );

9、浮雕

数字图像处理之matlab大作业:美图秀秀

img=imread('lisa.jpg')
[m,n,d]=size(img)
for k=1:d    % d--通道数
    for i=2:m-1 % m--行数
        for j=2:n-1 % n--列数
            img2(i,j,k) = img(i+1,j+1,k)-img(i-1,j-1,k)+128;%浮雕效果算法
            if img2(i,j,k)>255
                img2(i,j,k) = 255; %像素值超过255的都置为255
            elseif img2(i,j,k)<0
                    img2(i,j,k) = 0; %像素值小于0的都置为0
            else
                    img2(i,j,k) = img2(i,j,k);
            end
        end
    end
end
subplot(1,2,1),imshow(img );
subplot(1,2,2),imshow(img2 );

10、油画效果

数字图像处理之matlab大作业:美图秀秀

Image=imread('lisa.jpg')
se=strel('ball',5,5);%选取球形结构元素
result2=imerode(Image,se); %腐蚀灰度图像
imshow(Image);title('原始灰度图像');
figure,imshow(result2);title('腐蚀后的图像');

 11、图像合成

注意两张图片需要尺寸一致

数字图像处理之matlab大作业:美图秀秀

img = imread('lisa.jpg');
background = imread('tina.jpg');
img2=0.6*img+0.4*background;
subplot(1,3,1),imshow(img ),title('前景');
subplot(1,3,2),imshow(background ),title('背景'); 
subplot(1,3,3),imshow(img2),title('合成的图片');

12、贴纸

矢量图库iconfont-阿里巴巴矢量图标库

png 显示 全黑 

13、相框

14、特征点定位

15、瘦脸

16、涂口红

17、底片效果

数字图像处理之matlab大作业:美图秀秀

I=imread('lisa.jpg');
subplot(1,2,1),imshow(I),title("原图像");
J=253-I;
subplot(1,2,2),imshow(im2gray(J)),title("底片效果");

18、GUI界面文章来源地址https://www.toymoban.com/news/detail-512439.html

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

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

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

相关文章

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

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

    2024年02月10日
    浏览(35)
  • 数字图像处理MATLAB大作业:基础版

    本次程序共分为10个功能点: 第一个功能点是实现彩色图像的灰度化、灰度图像的二值化及图像的灰度变化。 第二个功能点是实现图像的代数运算及逻辑运算。 第三个功能点是基于直方图修正的图像增强。 第四个功能点是基于空间域去实现图像平滑和提取图像边缘。 第五个

    2024年02月05日
    浏览(32)
  • MATLAB【数字图像处理】 大作业:人脸表情识别

    运用已掌握的知识以及查阅相关资料,设计方案能够识别人脸表情中的高兴、厌恶、生气、悲伤、面无表情这五类表情。 本系统是基于PCA算法的人脸特征提取。运用PCA算法来实现人脸特征提取,然后通过计算欧式距离来判别待识别测试人脸。 整个系统的流程是首先是人面部

    2024年02月06日
    浏览(27)
  • 数字图像处理之matlab大作业:车牌识别

    1、基于模板的车牌识别,带GUI GitHub - joeyos/LicensePlateRecognition: License plate recognition 2、基于模板的车牌识别,注释详细 https://github.com/hangxyz/License-Plate-Recognition-by-MATLAB 3、其他优秀作品 1)董同学:带语音播报的车牌识别 车牌识别-基于模板匹配_勇敢歪歪的博客-CSDN博客_车牌识

    2024年02月08日
    浏览(33)
  • 美颜算法--数字图像处理作业

    请为图中人做美肌处理,去痘或去皱纹。(2选1,或自选图片) 作业内容请包含所用的算法说明,效果图,主要算法的代码,以及对效果图的分析。所有内容用图片或文字的形式提交,不要用附件。 2.1 分析问题         图一可见大量痘点,痘点在途中属于噪声,考虑首先

    2024年02月03日
    浏览(31)
  • 数字图像处理大作业实验报告

         《数字图像处理》 期末大作业 班    级:数字媒体技术2020级1班 姓    名:快乐的小蓝 学    号:XXXXXXXXX XXXX大学信息学院 目录 一、任务描述 二、设计思路 三、功能模块 1 人脸定位 1.1 算法原理 1.检测最大连通域 2.基于肤色的检测 3.使用matlab自带的工具人脸识别

    2023年04月23日
    浏览(40)
  • 数字图像处理——大作业 基于车道信息的违法车辆车牌识别

    车牌识别系统广泛应用于交通管理、收费站、城市交叉口、港口和机场、机动车检测、停车场管理等不同的场所,对提高这些场所交通系统的管理水平和自动化程度具有重要的意义[1]。车牌自动识别系统主要包括车牌定位、车牌分割、车牌字符识别三部分。 其中,仅就车牌字

    2024年02月07日
    浏览(42)
  • 数字图像处理-matlab图像内插

    目标各像素点的灰度值代替源图像中与其最邻近像素的灰度值 参考博客 假设一个2X2像素的图片采用最近邻插值法需要放大到4X4像素的图片,右边该为多少? 最近邻插值法坐标变换计算公式: s r c X = d s t X ∗ ( s r c W i d t h / d s t W i d t h ) srcX=dstX*(srcWidth/dstWidth) src X = d s tX ∗

    2024年02月03日
    浏览(45)
  • 基于matlab的数字图像处理之彩色图像处理

    一、实验目的 (1)了解如何利用RGB分量生成简单的图像。 (2)熟练掌握RGB彩色模型转换到HIS彩色模型的过程。 (3)熟练掌握RGB图像的彩色分割。 (4)熟练掌握彩色图像如何在向量空间中进行边缘检测。 二、实验仪器(软件平台)     计算机、MATLAB软件 三、实验原理

    2024年02月06日
    浏览(35)
  • matlab数字图像处理之图像增强

    图像处理 基本目的之一是改善图像质量,而改善图像最常用的技术是图像增强的目的是为了改善图像的视觉效果,使图像更加清晰,便于人和计算机对图像进一步的分析和处理 图像质量 的基本含义是指人们对一幅图像视觉感受的评价。图像增强的目的就是为了改善图像显示

    2024年02月04日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包