matlab做直方图均衡,下面的程序是局部直方图均衡,程序运行后的图像显示如下图,黑色部分灰度值均为1局部直方图均衡方法步骤:首先定义一个大小合适的移动子图块,然后在以每个像素点为
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/22 21:48:57
matlab做直方图均衡,下面的程序是局部直方图均衡,程序运行后的图像显示如下图,黑色部分灰度值均为1局部直方图均衡方法步骤:首先定义一个大小合适的移动子图块,然后在以每个像素点为
matlab做直方图均衡,下面的程序是局部直方图均衡,程序运行后的图像显示如下图,黑色部分灰度值均为1
局部直方图均衡方法步骤:首先定义一个大小合适的移动子图块,然后在以每个像素点为中心的子图块上进行直方图均衡化,并将处理结果代替相应子块中心点的灰度值
clear;
close all;
c=imread('lena.bmp'); %读取图像
figure,imshow(c),title('原始图象'); %显示原始图象
n=15;
a(1:n,1:n)=1; %a即n×n模板,元素全是1
%输入图像是p×q的,且p>n,q>n
x1=double(c);
x2=x1;
%A(a:b,c:d)表示A矩阵的第a到b行,第c到d列的所有元素
for i=1:512-n+1
for j=1:512-n+1
m=x1(i:i+(n-1),j:j+(n-1)).*a(1:n,1:n); %取出x1中从(i,j)开始的n行n列元素与模板相乘
k=histeq(m);%对块图进行直方图均衡
x3=double(k);
x2(i,j)=x3(8,8); %将均衡后中心点的像素值赋给原图对应点的元素
end
end
%未被赋值的元素取原值
d=uint8(x2);
figure,imshow(d),title('均衡后的图像'); %显示均衡后的图象
应该如何修改,请高手指教
matlab做直方图均衡,下面的程序是局部直方图均衡,程序运行后的图像显示如下图,黑色部分灰度值均为1局部直方图均衡方法步骤:首先定义一个大小合适的移动子图块,然后在以每个像素点为
数据类型问题,histeq函数,当你的图像是double型时,返回值是0或者1;当你的图像是uint8型时,返回值为0-255.
所以你编的代码里的:k=histeq(m);%对块图进行直方图均衡,m为double型,所以其k就是全1,那么x2中对应的位置也就是全1,最后显示转化成uint8显示肯定为黑色.
所以把k=histeq(m);改成k=histeq(uint8(m));即可.运行结果如图