【图像处理】分形插值算法调换图片matlab源码

一、简介

1 分形插值是根据分形几何自相似性原理和送代函数系统ifs理论,将已知数据插值成具有自相似结构的曲线或曲面,其中每个局部都与整体自相似或统计自相似,因此,分形插值可以有效地避免传统插值方法对相邻插值点间局部变化特征的掩盖。
绝大多数情况下,图像处理是为了改善图像的视觉质量。因此,如何评价图像的质量是一个十分重要的问题。
在图像中,有些像素与相邻像素间灰度值存在突变,即存在灰度不连续性。这些具有灰度值突变的像素就是图像中描述对象的轮廓或纹理图像的边缘像素。在图像放大中,对这些具有不连续灰度特性的像素,如果采用常规的插值算法生成新增加的像素,势会使放大图像的轮廓和纹理模糊,降低图像质量。
迭代系统函数对于处理规则分形图形有明显的优势,但是对于自然界现象用随机分形处理会更加形象逼真。
2 案例
已知人脸和狗脸图片,使用分形插值算法调换图中的人脸和狗脸。
在这里插入图片描述
在这里插入图片描述

clear all
clc
function rgbPic = bw2rgb(bwPic)
 
bwPicSize = size(bwPic);
 
rgbPic = zeros(bwPicSize(1),bwPicSize(2),3);
I = imread('people.png');
I2 = imread('dog.png');
 
doge = imresize(I2,[size(I,1) size(I,2)]);
gray = rgb2gray(I);
YCbCr = rgb2ycbcr(I);
heigth = size(gray,1);
width = size(gray,2);
for i = 1:heigth
    for j = 1:width
        Y = YCbCr(i,j,1);
        Cb = YCbCr(i,j,2);
        Cr = YCbCr(i,j,3);
        if(Y < 80)
            gray(i,j) = 0;
        else
            if(skin(Y,Cb,Cr) == 1)
                gray(i,j) = 255;
            else
                gray(i,j) = 0;
            end
        end
    end
end
SE=strel('arbitrary',eye(5));  
gray = imopen(gray,SE);
gray = imclose(gray,SE);
 
a1=(255-bw2rgb(gray))/255;
next1=immultiply(I,a1);
 
a2=bw2rgb(gray)/255;
next2=immultiply(doge,a2);
 
add=imadd(next1,next2);
 [L,num] = bwlabel(gray,8);
STATS = regionprops(L,'BoundingBox');
n = 1;
result = zeros(n,4);
part = zeros(h,w);
for i = y:(y+h)
    for j = x:(x+w)
        if bImage(i,j) == 0
            part(i-y+1,j-x+1) = 255;
        else
            part(i-y+1,j-x+1) = 0;
        end
    end
end

三、运行结果

在这里插入图片描述

三、备注

完整代码或者代写添加QQ1575304183

往期回顾>>>>>>

【图像识别】国外车牌识别

【图像识别】基于cnn卷积神经网络之验证码识别matlab源码

【图像识别】基于svm植物叶子疾病检测和分类

【图像识别】路面裂缝识别含GUI源码

【图像识别】基于RGB和BP神经网络的人民币识别系统含GUI界面

【图像识别】条形码识别系统

【图像识别】基于不变矩的数字验证码识别含GUI界面

【图像识别】基于模板匹配之手写数字识别系统GUI界面

【图像识别】基于贝叶斯分类器之目标识别matlab源码

【图像识别】身份证号码识别matlab源码

【图像识别】条形码识别系统

【图像分类】基于极限学习分类器对遥感图像分类

【图像识别】基于BP神经网络之字母识别matlab源码

你可能感兴趣的:(matlab,图像处理)