失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 空域图像增强-图像灰度变换

空域图像增强-图像灰度变换

时间:2023-04-05 15:25:34

相关推荐

空域图像增强-图像灰度变换

1.图像灰度变换。自选一张图片,完成以下图像处理:①显示图像的灰度直方图;②直方图均衡化,对比变化前后的图像和灰度直方图;③对图像进行线性灰度变换,对某部分灰度值进行扩展,压缩其它灰度值区域,对比变化前后的图像和灰度直方图。

[注] 取整之后的值就是映射之后的坐标.

下面写出映射后的直方图.

1.1 显示图像的灰度直方图

%gray histogramI = imread('Durant.png');%显示原图subplot(1, 3, 1);imshow(I);title('原始图像');%subplot(1, 3, 2);y = rgb2gray(I);imshow(y);title('灰度图');%subplot(1, 3, 3);imhist(y);title('gray histogram');

1.2 直方图均衡化

%histogram equalizationI = imread('Durant.png');%进行灰度变换I_gray = rgb2gray(I);%对图像I_gray进行直方图均衡化%直方图均衡通过转换灰度图像亮度值或索引图像的颜色图值来增强图像对比度, %输出图像的灰度直方图近似与给定的直方图相匹配. %J = histeq(I, N): %将灰度图像I转化成具有N个离散灰度级的灰度图像J, N缺省值为64. J = histeq(I_gray, 64);%显示I_graysubplot(1, 4, 1);imshow(I_gray);title('灰度图像');%subplot(1, 4, 2);imshow(J);title('均衡化后的灰度图像');%subplot(1, 4, 3);%imhist是MATLAB图像处理模块中的一个函数, %用于提取图像中的直方图信息. imhist(I_gray);title('灰度图像的直方图');%subplot(1, 4, 4);imhist(J);title('均衡化后的直方图');

(N=64)

(N=128)

(N=2)

1.3 线性灰度变换与分段线性灰度变换

1.3.1 线性灰度变换

线性灰度变换: %linear gray-scale transformation%I = imread('Durant.png');%I_gray = rgb2gray(I);%I_gray2 = I_gray - 50;I_gray3 = I_gray + 50;I_gray4 = I_gray * 0.5;I_gray5 = I_gray * 2.0;% subplot(1, 11, 1);imshow(I);title('原图');%subplot(1, 11, 2);imshow(I_gray);title('原图的灰度图');%subplot(1, 11, 3);imhist(I_gray);title('原图的灰度直方图');%subplot(1, 11, 4);imshow(I_gray2);title('Igray2 = Igray - 50');%subplot(1, 11, 5);imhist(I_gray2);%subplot(1, 11 ,6);imshow(I_gray3);title('Igray3 = Igray + 50');%subplot(1, 11, 7);imhist(I_gray3);%subplot(1, 11, 8);imshow(I_gray4);title('Igray4 = Igray * 0.5');%subplot(1, 11, 9);imhist(I_gray4);%subplot(1, 11, 10);imshow(I_gray5);title('Igray5 = Igray * 2.0');%subplot(1, 11, 11);imhist(I_gray5);

1.3.2 分段线性灰度变换

%对图像进行分段线性变换 %用底层算法实现 image = imread('Durant.png');%rgb2gray是MATLAB内部一种处理图像的函数. %通过消除图像色调和饱和度信息, 同时保留亮度, %实现将RGB图像或彩色图像转换为灰度图像. %即灰度化处理. image_gray = rgb2gray(image);%image(:,:,1): 获取三维矩阵image中第一维、第二维的全部元素 image_matrix = image_gray(:,:,1);%将image_matrix数组中的元素类型转换为double类型%image_matrix = double(image_matrix);%size(image): %将三维矩阵image的行数给height, %将.............的列数给width, %将...........的通道数给channels. [height, width, channels] = size(image_gray);%创建一个height×width的零矩阵G = zeros(height, width);%标定坐标点x1 = 40; x2 = 130;y1 = 50; y2 = 190;%创建一个1×255的零向量%灰度映射表, 灰度在0到255之间%注: f(0) = 0gray_map = zeros(1, 255);%计算灰度映射表 %当x < x1时, 灰度变换函数为%f(x) = y1 / x1 * xfor i = 1 : x1 - 1 %i从1到x1-1, 步长默认为1gray_map(i) = y1 * i / x1;end%当x1 ≤ x ≤ x2时, 灰度变换函数为%f(x) = (y2 - y1)*(x - x1) / (x2 - x1) + y1for i = x1 : x2 %i从x1到x2, 步长默认为1gray_map(i) = (y2 - y1) * (i - x1) / (x2 - x1) + y1;end%当x > x2时, 灰度变换函数为 %f(x) = (255 - y2)*(x - x2) / (255 - x2) + y2for i = x2 + 1 : 255 %i从x2+1到255gray_map(i) = (255 - y2) * (i - x2) / (255 - x2) + y2;end%for i = 1 : heightfor j = 1 : width%遍历image_matrix矩阵的每一个元素T = image_matrix(i, j); %分析图片矩阵中坐标为(i, j)的元素if(T == 0)G(i, j) = 0; elseG(i, j) = gray_map(T); %根据映射关系, 将映射后的值放入G矩阵中坐标(i ,j)的位置endendend%将G矩阵中的元素类型转换为uint8(0~255)image_out = uint8(G);%显示原图的灰度图像subplot(1, 4, 1);imshow(image_gray);title('原图的灰度图像');%显示原图(灰度图像)的直方图subplot(1, 4, 2);imhist(image_gray);title('原图灰度图像的直方图');%显示处理后的图像subplot(1, 4, 3);imshow(image_out);title('处理后的图像');%显示处理后(灰度图像)的直方图subplot(1, 4, 4);imhist(image_out);title('处理后的灰度直方图');

如果觉得《空域图像增强-图像灰度变换》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。