MATLAB图像处理(2)—hsv变换,自编直方图均衡化函数,双线性插值,抠图换色

1.利用MATLAB,修改亮度、饱和度和色调数据后显示原始图像和处理后的图像。

Img=imread('image.jpeg');
hsv=rgb2hsv(Img);
hsv(:,:,1)=1.1*hsv(:,:,1);%调整色调
hsv(:,:,2)=0.8*hsv(:,:,2);%调整饱和度
hsv(:,:,3)=1.5*hsv(:,:,3);%调整亮度
result=hsv2rgb(hsv);
subplot(121),imshow(Img),title('原图像');
subplot(122),imshow(result),title('HSV反变换');

2.实现对彩色图像的直方图均衡化处理(不采用MATLAB中封装好的统计直方图及均衡化函数)。

%主函数
function coloraverage()
I=imread('hehua.jpg');
imshow(I);
I1=I(:,:,1);%提取红色分量
I2=I(:,:,2);%提取绿色分量
I3=I(:,:,3);%提取蓝色分量
I1=histogram(I1);   %构造的函数
I2=histogram(I2);
I3=histogram(I3);
c=cat(3,I1,I2,I3);  %cat用于构造多维数组
subplot(1,2,1);imshow(I),title('原图');
subplot(1,2,2);imshow(c),title('均衡化后图像');

%调用的(直方图均衡化)构造函数
function d=histogram(I)%构造histogram函数
J=I;
[m,n]=size(I);      %确定矩阵大小
area=m*n;
a=zeros(1,256);     %产生1*256的零矩阵a,用来存放原始图像各个灰度值的个数
b=zeros(1,256);
for i=1:m           %记录各个灰度值的个数
    for j=1:n
        d=I(i,j)+1;   %获取(i,j)位置的灰度值(注意:灰度值为0-255,对应矩阵的1-256)
        a(1,d)=a(1,d)+1;    %矩阵a上对应灰度值的计数+1
    end
end
for i=1:256         %均衡化
    sum=0;
    for j=1:i
        sum=sum+a(1,j);
    end
    b(1,i)=sum*255/area;
end
for i=1:m           %用均衡化后的数据代替原位置的数据
    for j=1:n
        d=J(i,j)+1;
        J(i,j)=b(1,d);
    end
end
d=J;

3.一幅图像
在这里插入图片描述
,设置缩放比例
在这里插入图片描述

,采用双线性插值对其进行放大。(不采用MATLAB函数)

f=[1 4 7;2 5 8;3 6 9];
[h,w]=size(f);
kx=2.3;
ky=1.6;
i=ceil(ky*h);
j=ceil(kx*w);
for newx=1:j;
    for newy=1:i;
        oldx=(newx-1)/kx;
        oldy=(newy-1)/ky;
        x=floor(oldx)+1;
        y=floor(oldy)+1;
        a=oldx-floor(oldx);
        b=oldy-floor(oldy);
        if x<w && y<h
            g(newy,newx)=f(y,x)+b*(f(y+1,x)-f(y,x))+a*(f(y+1,x)-f(y,x))+a*b*(f(y+1,x+1)+f(y,x)-f(y,x+1)-f(y+1,x));
        elseif x>=w && y<h
            g(newy,newx)=f(y,x)+b*(f(y+1,x)-f(y,x));
        elseif x<w && y>=h
            g(newy,newx)=f(y,x)+a*(f(y,x+1)-f(y,x));
        else
            g(newy,newx)=f(y,x);
        end
    end
end

4.将荷花图像采用MATLAB抠出,并改变荷花的颜色

Image=im2double(imread('hehua.jpg'));
subplot(1,2,1);imshow(Image);title('原图');
HSV=rgb2hsv(Image);h=HSV(:,:,1);S=HSV(:,:,2);
epslon=1/10;
pos=(h>14/48-epslon & h<1/4+epslon & S>1/4);
h(~pos)=h(~pos)*0.75;
HSV(:,:,1)=h;
result=hsv2rgb(HSV);
subplot(1,2,2);imshow(result);title('最终结果');

MATLAB图像处理(2)—hsv变换,自编直方图均衡化函数,双线性插值,抠图换色_第1张图片

支持可以关注我哦,持续分享编写的代码。

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