计算机图像处理与机器视觉(1)--灰度变换

最近在学习图像处理,也就分享几个最近学习的初级图像处理代码,很low, 看不上的大佬们还望勿喷

灰度线性变化

在这里插入图片描述

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\1.png');
mingray=min(min(image));
maxgray=max(max(image));
minshow=0;
maxshow=255;
iamgeshow=(maxshow-minshow)/(maxgray-mingray)*(image-mingray)+minshow;

subplot(1,2,1);
imshow(image);
title('\fontsize{16}原图像');
subplot(1,2,2);
imshow(iamgeshow);
title('\fontsize{16}新图像');

在这里插入图片描述
由于我们原图的最大像素值也是255,最小的是0,所以相当于线性变化没有效果
当我把minshow也就是变化之后的最小值改为100,可以看到,明显有变化
在这里插入图片描述

灰度非线性变化

这里就只是区别于之前的线性,可以利用例如开方之类的
这里我们以开方为例
因为0-255,开方以后为0-16,我们在*16就恢复到0-255
在这里插入图片描述

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\1.png');
imageshow=image;
for i=1:size(image,1)
    for j=1:size(image,2)
        imageshow(i,j)=sqrt(double(image(i,j)))*16;
    end
end

subplot(1,2,1);
imshow(image);
title('\fontsize{16}原图像');
subplot(1,2,2);
imshow(imageshow);
title('\fontsize{16}新图像');

在这里插入图片描述

锯齿形灰度拉伸

在这里插入图片描述

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\1.png');
mingray=min(min(image));
maxgray=max(max(image));
imageshow=image;
minshow=0;
maxshow=255;
divide_num=4;%这里是把图像分成了若干个区域,每个区域都线性映射到0-255
divide_length=floor((maxgray-mingray)/divide_num);
min_gray=zeros(1,divide_num);%这两个分别保存每段区间对应的最小值和最大值,先生成一个对应阶的0矩阵
max_gray=zeros(1,divide_num);
min_gray(1)=mingray;
for i=2:divide_num
    min_gray(i)=min_gray(i-1)+divide_length;
end
max_gray(divide_num)=maxgray;
for i=1:divide_num-1
    max_gray(i)=min_gray(i+1);
end

for i=1:size(image,1)
    for j=1:size(image,2)
        for m=1:divide_num
            if image(i,j)>=min_gray(m) && image(i,j)<max_gray(m)
                break;
            end
            end
       imageshow(i,j)=(maxshow-minshow)/(max_gray(m)-min_gray(m))*(image(i,j)-min_gray(m))+minshow; 
    end
end

subplot(1,2,1);
imshow(image);
title('\fontsize{16}原图像');
subplot(1,2,2);
imshow(imageshow);
title('\fontsize{16}新图像');

在这里插入图片描述
可以看到原来图片中间的灰色部分,突然产生了明显的突变

灰度直方图

利用系统函数

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\1.png');
figure(1);
imhist(image);

在这里插入图片描述

灰度直方图和累计灰度直方图

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\3.png');
imageGray=0:255;
imageBar=imageGray;
for i=1:size(imageGray,2)
    imageBar(i)=sum(sum(image==imageGray(i)));
end
imageBar=imageBar/(size(image,1)*size(image,2));

Sumbar=imageBar;
for i=2:size(Sumbar,2)
    Sumbar(i)=Sumbar(i-1)+imageBar(i);
end

subplot(1,2,1);
bar(imageGray,imageBar);
title('\fontsize{16}直方图');
subplot(1,2,2);
bar(imageGray,Sumbar);
title('\fontsize{16}累积直方图');

在这里插入图片描述

直方图均衡

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\3.png');
imageGray=0:255;
imageBar=imageGray;
for i=1:size(imageGray,2)
    imageBar(i)=sum(sum(image==imageGray(i)));
end
imageBar=imageBar/(size(image,1)*size(image,2));

Sumbar=imageBar;
for i=2:size(Sumbar,2)
    Sumbar(i)=Sumbar(i-1)+imageBar(i);
end

hd=zeros(1,256);
imagenew=image;
for i=1:size(image,1)
    for j=1:size(image,2)
        imagenew(i,j)=Sumbar(image(i,j)+1)*255;
    end
end
imageBar_new=0:255;
for i=1:size(imageGray,2)
    imageBar_new(i)=sum(sum(imagenew==imageGray(i)));
end
imageBar_new=imageBar_new/(size(imagenew,1)*size(imagenew,2));

subplot(2,2,1);
imshow(image);
title('\fontsize{16}原图');
subplot(2,2,2);
bar(imageGray,imageBar);
title('\fontsize{16}原图的直方图');
subplot(2,2,3);
imshow(imagenew);
title('\fontsize{16}新图');
subplot(2,2,4);
bar(imageGray,imageBar_new);
title('\fontsize{16}新图的直方图');

在这里插入图片描述

梯度法

clear;
clc;
image=imread('D:\MATLAB\MATLAB\pictrue\1.png');
imageout=image;

for i1=1:size(image,1)-1
    for i2=1:size(image,2)-1
        c=image(i1,i2);
        c1=image(i1,i2+1);
        c2=image(i1+1,i2);
        b=abs(c-c1)+abs(c-c2);
        if b>10
            imageout(i1,i2)=b;
        else imageout(i1,i2)=128;
        end
    end
end

subplot(1,2,1);
imshow(image);
title('\fontsize{16}原图像');
subplot(1,2,2);
imshow(imageout);
title('\fontsize{16}新图像');

在这里插入图片描述

卷积函数

function y = juanji(a,b)
%a为积分对象,b为卷积核
y=a;
b_length_y=(size(b,2)-1)/2;
b_length_x=(size(b,1)-1)/2;
for i=b_length_x+1:size(a,1)-b_length_x
    for j =b_length_y+1:size(a,2)-b_length_y
        y(i,j)=sum(sum(a(i-b_length_x:i+b_length_x,j-b_length_y:j+b_length_y).*b));   
    end
end
end

伪彩色变化

I=imread(".\pictrue\1.png");
[m,n]=size(I);
hd=zeros(256,1);
for j=1:m
    for i=1:n
        k=I(j,i);
        hd(k+1)=hd(k+1)+1;
    end
end
p=zeros(256,1);
q=zeros(256,1);
for i=1:256
  p(i)=hd(i)/(m*n);
  for j=1:i
      q(i)=q(i)+p(j);
  end
  q(i)=uint8(q(i)*100)/100;
end
hd1=zeros(256,1);
for j=1:m
    for i=1:n
        k=q(I(j,i)+1)*255;
        hd1(k)=hd1(k)+1;
    end
end

 for i=1:m
for j=1:n
if I(i,j)>=0 &I(i,j)<16
new(i,j,1)=0;
new(i,j,2)=0;
new(i,j,3)=0;
elseif I(i,j)>=16 &I(i,j)<32
new(i,j,1)=0;
new(i,j,2)=0;
new(i,j,3)=191;
elseif I(i,j)>=32 &I(i,j)<48
new(i,j,1)=0;
new(i,j,2)=191;
new(i,j,3)=0;
elseif I(i,j)>=48 &I(i,j)<64
new(i,j,1)=0;
new(i,j,2)=191;
new(i,j,3)=191;
elseif I(i,j)>=64 &I(i,j)<80
new(i,j,1)=191;
new(i,j,2)=0;
new(i,j,3)=0;
elseif I(i,j)>=80 &I(i,j)<96
new(i,j,1)=191;
new(i,j,2)=0;
new(i,j,3)=191;
elseif I(i,j)>=96 &I(i,j)<112
new(i,j,1)=191;
new(i,j,2)=191;
new(i,j,3)=0;
elseif I(i,j)>=112 &I(i,j)<128
new(i,j,1)=191;
new(i,j,2)=191;
new(i,j,3)=191;
elseif I(i,j)>=128 &I(i,j)<144
new(i,j,1)=64;
new(i,j,2)=64;
new(i,j,3)=64;
elseif I(i,j)>=144 &I(i,j)<160
new(i,j,1)=0;
new(i,j,2)=0;
new(i,j,3)=255;
elseif I(i,j)>=160 &I(i,j)<176
new(i,j,1)=0;
new(i,j,2)=255;
new(i,j,3)=0;
elseif I(i,j)>=176 &I(i,j)<192
new(i,j,1)=0;
new(i,j,2)=255;
new(i,j,3)=255;
elseif I(i,j)>=192 &I(i,j)<208
new(i,j,1)=255;
new(i,j,2)=0;
new(i,j,3)=0;
elseif I(i,j)>208 &I(i,j)<224
new(i,j,1)=255;
new(i,j,2)=0;
new(i,j,3)=255;
elseif I(i,j)>=224 &I(i,j)<240
new(i,j,1)=255;
new(i,j,2)=255;
new(i,j,3)=0;
elseif I(i,j)>=240 &I(i,j)<256
new(i,j,1)=255;
new(i,j,2)=255;
new(i,j,3)=255;
end
end
 end
 subplot(1,2,1);
 imshow(I);
 title("原图像");
 subplot(1,2,2);
 imshow(new);
  title("伪彩色");

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值