Matlab底层算法实现图像灰度对数,指数,幂次变换

灰度对数公式

灰度对数变换公式如下:
                                                      y = a + l o g ( 1 + x ) ) b y=a+\frac{log(1+x))}{b} y=a+blog(1+x))
其中a控制曲线的垂直偏移量,b为正常数,控制曲线。

源代码

clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
G=zeros(height,width);

%输入值
a=10;
b=0.025;

%灰度映射表,灰度在0255之间
gray_map = zeros(1,256);

%计算灰度映射表
for i=1:256  
  y=log(1+i)/b+a;
  if(y<0)
     y=0;
  elseif(y>255)
     y=255;
  end
  gray_map(i)=round(y);
end

for i=1:height
    for j=1:width
       T = image_matrix(i,j);
       if(T==0)
           G(i,j)=gray_map(1);
       else
           G(i,j)=gray_map(T);
       end
    end
end
image_out = uint8(G);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);

效果图

在这里插入图片描述

灰度指数公式

灰度指数变换公式如下:
                                                      y = b c ( x − a ) − 1 y=b^{c(x-a)}-1 y=bc(xa)1
其中b,c控制曲线形状,参数a控制曲线的左右位置。

源代码

clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
G=zeros(height,width);

%输入值
a=0;
b=1.5;
c=0.065;

%灰度映射表,灰度在0255之间
gray_map = zeros(1,256);

%计算灰度映射表
for i=1:256  
  y=b^(c*(i-a))-1;
  if(y<0)
     y=0;
  elseif(y>255)
     y=255;
  end
  gray_map(i)=round(y);
end

for i=1:height
    for j=1:width
       T = image_matrix(i,j);
       if(T==0)
           G(i,j)=gray_map(1);
       else
           G(i,j)=gray_map(T);
       end
    end
end
image_out = uint8(G);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);

效果图

在这里插入图片描述

公式

幂次变换公式如下:
                                                      y = c x r + b y=cx^{r}+b y=cxr+b
其中c,r为正数。修改幂次变化公式,使x与y的取值范围都在0到255之间。
                                                      y = 255 c ( x 255 ) r + b y=255c(\frac{x}{255})^{r}+b y=255c(255x)r+b

源代码

clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
G=zeros(height,width);

%输入值
c=1;
r=1.7;
b=20;

%灰度映射表,灰度在0255之间
gray_map = zeros(1,256);

%计算灰度映射表
for i=1:256  
  y=c*255*(i/255)^r+b;
  if(y<0)
     y=0;
  elseif(y>255)
     y=255;
  end
  gray_map(i)=round(y);
end

for i=1:height
    for j=1:width
       T = image_matrix(i,j);
       if(T==0)
           G(i,j)=gray_map(1);
       else
           G(i,j)=gray_map(T);
       end
    end
end
image_out = uint8(G);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);

效果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手写不期而遇

感谢你的打赏,也欢迎一起学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值