matlab图像处理——直方图及直方图均衡化

imhist()
对rice.png和增强亮度后的增强对比度后的图进行直方图展示

%% imhist() 对于brightness 和 contrast的不同
clear all;
% brightness
I=imread('rice.png');
J=imadd(I,50);    %每个像素值增加50
%contrast
K=immultiply(I,1.5);
subplot(1,3,1);imhist(I);
subplot(1,3,2);imhist(J);
subplot(1,3,3);imhist(K);

matlab图像处理——直方图及直方图均衡化_第1张图片

直方图均衡化 histeq()
灰度值范伟变化集中在狭小的范围,直方图均衡化(Equalization)将灰度范围拉大;

%% 直方图均衡化
clear all;
I=imread('pout.tif');
I2=histeq(I);
subplot(1,4,1);imhist(I);
subplot(1,4,2);imshow(I);
subplot(1,4,3);imshow(I2);
subplot(1,4,4);imhist(I2);

matlab图像处理——直方图及直方图均衡化_第2张图片
二值化
graythresh()函数用于计算二值化变换过程中的最优阈值(threshold).灰度图像上超过该阈值的点将被赋值为1,低于该阈值的点将被赋值为0.
im2bw()用于进行二值化变换.

%% 图像的二值化(灰度图像转为二值图像)
clear all;
I=imread('rice.png');
level=graythresh(I);
bw=im2bw(I,level);
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(bw);

matlab图像处理——直方图及直方图均衡化_第3张图片
图像的几何变换
图像的几何变换本质上就是将图像乘以一个矩阵得到新图像的过程.
matlab图像处理——直方图及直方图均衡化_第4张图片

旋转rotate

%% 图像的位置旋转,改变每个像素的位置
clear all;
I=imread('rice.png');
J=imrotate(I,35,'bilinear'); % 35是旋转的角度 bilinear双线性插值算法,补上缺的像素
subplot(1,2,1);imshow(I);
subplot(1,2,2);imshow(J);
size(I);% 得到 [256, 256]
size(J);% 得到 [357, 357]

matlab图像处理——直方图及直方图均衡化_第5张图片
注意旋转后的size不同,旋转后的size更大一些。

手动实现均衡化

思路:
找到直方图种横坐标的最大值最小值,遍历矩阵找max、min,将其作为max_new、min_new,放大到0-255

%% 手动实现均衡化
clear all;
max=0;    min=300;
I=imread('rice.png');
K=histeq(I);
for i=1:size(I,1)
    for j=1:size(I,2)
        if max<I(i,j)
            max=I(i,j)
        elseif min>I(i,j)
            min=I(i,j)
        end
    end
end
distance=max-min;
Z=(double(I)-double(min)).*255/double(distance);
Y=uint8(Z);
subplot(1,3,1);imhist(I);title('原图','FontSize',10);
subplot(1,3,2);imhist(K);title('histeq函数处理后','FontSize',10);
subplot(1,3,3);imhist(Y);title('手动均衡化后','FontSize',10);

matlab图像处理——直方图及直方图均衡化_第6张图片

你可能感兴趣的:(图像处理)