灰度变换(一)
程序员文章站
2022-05-30 09:22:08
...
灰度变换基本函数
工作需要,最近在学习数字图像处理,权当就是一个记录了,把书上的例子自己实现一下加深理解,代码若有问题也欢迎大佬指定。
会根据自己的学习进度一点点进行更新,最理想情况当然是把学到的知识点都实现一下(当然这比较困难),尽量坚持下去吧,程序都是用matlab写的。源图片的链接如下:
链接:https://pan.baidu.com/s/16hazkEVVBsewzzH68YrbLg
提取码:zdvv
1、图像反转
根据公式 :
变换前的图片如下所示
f = imread("CH03\1.tif") ; %read the image
imshow(f); % show the image
saveas(gcf , 'reverse1.jpg')
f1 = imadjust(f , [0 , 1] , [1, 0] ,1) ; % reverse the intensity
figure ;
imshow(f1); % compare
saveas(gcf , 'reverse2.jpg')
变换结果如下 :
2、gamma变换
gamma变化的特点如下图所示,可以看出不同gamma值对暗部或者亮部有着压缩或者扩展的效果。
下面两幅图片的分别属于过暗和过亮的情况
gamma1=imread("CH03\gamma1.tif");
imshow(gamma1)
title("gamma1")
gamma1_trans = imadjust(gamma1,[],[],3); %change gamma value
figure ;
imshow(gamma1_trans)
title("gamma1 = 3 ")
gamma2=imread("CH03\gamma2.tif");
figure;
imshow(gamma2)
title("gamma2")
saveas(gcf , 'gamma2.jpg')
gamma2_trans = imadjust(gamma2,[],[],0.3); %change gamma value
figure ;
imshow(gamma2_trans)
title("gamma2 = 0.3 ")
saveas(gcf , 'gamma21.jpg')
gamma3=imread("CH03\gamma3.tif");
figure;
imshow(gamma3)
title("gamma3")
saveas(gcf , 'gamma3.jpg')
gamma3_trans = imadjust(gamma3,[],[],4); %change gamma value
figure ;
imshow(gamma3_trans)
title("gamma3 = 4 ")
saveas(gcf , 'gamma31.jpg')
经过gamma变换后:
3、分段线性
处理前图片:
图片的灰度值集中在某一段区间内,分别对其采用了阈值二值化处理和分段线性变换(变换曲线的斜率没有严格计算)
clc ;
clear ;
img1 = imread("CH03\piece1.tif") ;
imshow(img1)
title("initial")
saveas(gcf , 'piece1.jpg')
% thresholding process
low = find(img1 < 110 ); %
img2 = 255*ones(500) ;
img2(low) = 0 ;
figure
imshow(img2)
title("thresholding")
saveas(gcf , 'piece2.jpg')
% piecewise linear process
pie1 = find(img1 <= 95) ;
pie2 = find(img1 >95 & img1 <120) ;
pie3 = find(img1 >= 120) ;
img3 = img1 ;
img3(pie1) = 0.7*img3(pie1) ;
img3(pie3) = (img3(pie3) - 115 )*0.7 + 190 ;
img3(pie2) = (img3(pie2)-95)*5 +70 ;
figure ;
imshow(img3)
title("piecewise linear")
saveas(gcf , 'piece3.jpg')
处理后:
4、比特分层
就是将图像灰度值按每一位的0或1进行分层,8bit图像即可分为8层,越高位对灰度影响越大,因此反映整体,越低越反映细节。分层前:
clc ;
clear ;
close all;
img= imread("CH03\bit.tif") ;
imshow(img)
title("bit all")
saveas(gcf,'bitall.jpg')
imgbit = zeros(596000,8);
for i = 1:1:8
bit = find(bitget(img,i)); % get the value of bit i
imgbit(bit,i) = 1 ;
end
imgbit = reshape(imgbit,[500,1192,8]);
% 1 bit plane
figure;
imshow(imgbit(:,:,1))
title('bit1')
saveas(gcf ,'bit1.jpg')
% 2 bit plane
figure;
imshow(imgbit(:,:,2))
% 3 bit plane
figure;
imshow(imgbit(:,:,3))
% 4 bit plane
figure;
imshow(imgbit(:,:,4))
% 5 bit plane
figure;
imshow(imgbit(:,:,5))
% 6 bit plane
figure;
imshow(imgbit(:,:,6))
% 7 bit plane
figure;
imshow(imgbit(:,:,7))
% 8 bit plane
figure;
imshow(imgbit(:,:,8))
title('bit8')
saveas(gcf ,'bit8.jpg')
img_rb = imgbit(:,:,8)*128 + imgbit(:,:,7)*64 + imgbit(:,:,6)*32 + imgbit(:,:,5)*16 ;
figure
imshow(img_rb,[0,255])
title('bit5678')
saveas(gcf ,'bit5678.jpg')
img_rb2 = imgbit(:,:,8)*128 + imgbit(:,:,7)*64 ;
imshow(img_rb2,[0,255])
title('bit78')
saveas(gcf ,'bit78.jpg')
分层后的第一位和第八位分层图:
分别将78位和5678位合成重建
根据高四位合成的图像与原图已经十分相似,在图像压缩中比特分层就有应用。
推荐国漫风雨廊桥和望古神话之天选者,学习之余也要放松
推荐阅读
-
ubuntu13.10编译安装mono环境(一)
-
有一行代码看不懂,大神指教_html/css_WEB-ITnose
-
javascript - php将图文文章保存在text字段里好还是将生成一个html文件还是其他办法?
-
在同一个controller中想在不同action之间传递参数 去掉设cookie之外还有什么方法
-
一个简单的Node.js异步操作管理器分享_javascript技巧
-
求一份YYUC框架文件和帮助文档
-
一条命令让你明白shell中read命令的常用参数
-
从一个ip地址中,你可以得到什么解决思路
-
2016年3月13日这一天不等于3600*24秒?
-
Traits中的另一个有关问题