Matlab底层算法实现图像分段线性变换,灰度图固定阈值法,双固定阈值法

公式

函数表达式如下:
                                                      f ( x ) = { y 1 x / x 1 , x < x 1 ( y 2 − y 1 ) ( x − x 1 ) / ( x 2 − x 1 ) + y 1 , x 1 ⩽ x ⩽ x 2 ( 255 − y 2 ) ( x − x 2 ) / ( 255 − x 2 ) + y 2 , x > x 2 f(x)=\left\{\begin{matrix} y_{1}x/x_{1} ,& x<x_{1}\\ (y_{2}-y_{1})(x-x_{1})/(x_{2}-x_{1})+y_{1}, & x_{1}\leqslant x\leqslant x_{2}\\ (255-y_{2})(x-x_{2})/(255-x_{2})+y_{2}, & x>x_{2} \end{matrix}\right. f(x)= y1x/x1,(y2y1)(xx1)/(x2x1)+y1,(255y2)(xx2)/(255x2)+y2,x<x1x1xx2x>x2
( x 1 , y 1 ) (x1,y1) (x1,y1) ( x 2 , y 2 ) (x2,y2) x2,y2是图中两个转折点坐标。

源代码

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

%设定的坐标点
x1=130;
x2=150;
y1=50;
y2=200;

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

%计算灰度映射表
for i=1:x1   %先判断0到x1区间内的
  if(x1>0)
     gray_map(i)=y1*i/x1;
  else
     gray_map(i)=0;
  end
end

for i=x1+1:x2  %判断x1到x2区间内的
  if(x2~=x1)
     gray_map(i)=(y2-y1)*(i-x1)/(x2-x1)+y1;
  else
     gray_map(i)=y1;
  end
end

for i=x1+1:x2  %判断x1到x2区间内的
  if(x2~=x1)
     gray_map(i)=(y2-y1)*(i-x1)/(x2-x1)+y1;
  else
     gray_map(i)=y1;
  end
end

for i=x2+1:256  %判断x2到255区间内的
  if(x2~=255)
     gray_map(i)=(255-y2)*(i-x2)/(255-x2)+y2;
  else
     gray_map(i)=255;
  end
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);

效果图

在这里插入图片描述

固定阈值法公式

固定阈值法就是为灰度图像 f f f设定一个阈值 T T T,把灰度值小于给定阈值 T T T的像素置于0,大于阈值 T T T的像素置为255,从而对灰度图像实现二值化变换:
                                                                f ( x ) = { 0 , x < T 255 , x > T } f(x)=\begin{Bmatrix} 0,& x<T\\ 255, & x>T \end{Bmatrix} f(x)={0,255,x<Tx>T}

源代码

clc
image = imread('D:\2.png');
image_matrix=image(:,:,1);
image_matrix=double(image_matrix);
[height,width,channels]=size(image);
%设定的阈值
threshold = 100;
for i=1:height
    for j=1:width
       if(image_matrix(i,j)>= threshold)
          image_matrix(i,j) = 255;
       else
          image_matrix(i,j) = 0;
       end
    end
end
image_out = uint8(image_matrix);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);

效果图

在这里插入图片描述

双固定阈值法公式

双固定阈值法预先设置了两个阈值 T 1 T_{1} T1 T 2 T_{2} T2对图像的像素值灰度变换:
                                                                f ( x ) = { 0 , x ⩽ T 1 255 , T 1 < x < T 2 0 , x ⩾ T 2 f(x)=\left\{\begin{matrix} 0, & x\leqslant T_{1}\\ 255, & T_{1}<x<T_{2}\\ 0, &x\geqslant T_{2} \end{matrix}\right. f(x)= 0,255,0,xT1T1<x<T2xT2

源代码

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

%设定的阈值
threshold_one = 100;
threshold_two = 150;

for i=1:height
    for j=1:width
       if(image_matrix(i,j)>=threshold_one && image_matrix(i,j)<=threshold_two)
          image_matrix(i,j)=255;
       else 
          image_matrix(i,j)=0;
       end
    end
end
image_out = uint8(image_matrix);
%显示
subplot(1,2,1);
imshow(image);
subplot(1,2,2);
imshow(image_out);

效果图

在这里插入图片描述

  • 9
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

手写不期而遇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值