matlab raw图像 直方图均衡化 16位图像

tech2023-09-27  89

16位图像matlab直方图均衡化

前言8位图 histeq函数8位tif灰度图像图像8位bmp rgb图像 16位 raw文件读取16位图 代码参考:

前言

如果,如果你要做的是8位图直方图均衡化,别看了。前方左转查查histeq怎么用,挺简单的,另我个新手上路,不会用matlab,所以在这里记录下histeq怎么用,不看往下翻。

8位图 histeq函数

8位tif灰度图像图像

灰度图就很方便了,I是读取到的数组,用histeq将I做均衡化,用I1存储生成的数组,用figure显示出来

I = imread(‘xxx.tif’); I1 = histeq(I); figure,imshow(I1,[])

好的这里如果要存储的话,反正是8位的图像嘛,这里就直接用

imwrite(I1,'m.jpeg')

就可以了

8位bmp rgb图像

好的如果是8位的或者不知道多少位的bmp rgb图像的话,如果只是追求这个函数可以使用,那么,可以试试我这个方案

F=imread('D:\Project\直方图均衡\Pic\1.bmp'); F1=rgb2gray(F); F2 = histeq(F1); figure,imshow(F2,[])

其他操作同上

16位 raw文件读取

怎么读取找了半天,不重开一个文章了都记录在这吧 下面两行代码,把从fid读取到的数据存放到b这个数组里,[300,200]是文件大小,注,第一个参数一定要对,第二个无所谓。‘int16’是数据格式,8位的话就int8

fid=fopen('D:\Project\直方图均衡\Pic\0.Raw', 'r'); [b,count]=fread(fid,[300,200],'int16');

好的,另外你应该知道那个‘’单引号内部的是图像路径吧? 还有就是matlab左边的那个路径在的地方,被matlab视为根位置,对放在这个地方的文件不用前面的那一堆,可以直接写文件名,懂吧?

16位图 代码

不知道matlab代码怎么插入,用的lua脚本的格式凑合着看吧

function [img2] = a(img) img1 = double(img); [r,c] = size(img1);%获取图像的高r和宽c %统计图像中每个灰度级i出现的次数存到count(1,i)里 count = zeros(1,65536); for i=1:r for j=1:c count(1,img(i,j)+1) = count(1,img(i,j)+1)+1; end end %统计图像中每个灰度级i出现的概率,存储到p(1,i)里 p = zeros(1,65536); for i=1:65536 p(1,i) = count(1,i)/(r*c); end img2 = im2uint8(ones(r,c));%创建一个r * c大小的1矩阵 func_T = zeros(1,65536);%变换映射存储 p_sum = 0; %求直方图均衡化的变换函数 for k = 1:65536 p_sum = p_sum + p(k);%求每个灰度级的概率之和 func_T(k) = 255*p_sum;%根据变换函数的公式求每一点k对应的映射值 end func_T_z = round(func_T);%对变换函数进行取整,round 为四舍五入取整 %完成每个像素点的映射 for i = 0:255 findi = find(func_T_z==i);%找到灰度级为i的概率和 len = length(findi); for j=1:len findj = find(img==(findi(j)-1));%进行对应每个像素点的映射 img2(findj) = i; end end end

不确定有没有bug,觉得有问题的千万指出…把这个保存成a.mat文件放在matlab目录里,就可以直接调用啦,传入数组是刚从raw里读出来的b。

参考:

matlab实现 图像的直方图均衡化处理 直方图均衡化 代码

最新回复(0)