Matlab 设计一个图像处理场景,展示图像梯度的概念

it2022-05-05  76

假期呆实验室,老师给的一些小任务,拿来作为第一篇博客练手

图像梯度的概念: 详情请看:图像梯度的基本原理

重点在于:图像的梯度和函数的梯度概念差不多,图像可以看做是离散的函数,每个离散点即为像素。根据梯度的微分表达式可得,图像的梯度可以相当于2个相邻像素之间的差值。相邻两个像素的像素值相差越大,梯度越大。可以用做提取边缘信息。

思路:读取图片后,转化为灰度图,再转化为double类型。根据图像梯度的概念,分别算x和y反向上的梯度,然后相加,作为这一像素的像素值。然后将梯度图(提取的边缘信息图)与原图像相加,得到合成图,相当于给原图像增强了边缘。

为什么要转化为double类型? 因为imread()读入的图像是uint8类型,将原图像的灰度值转换成double的作用主要是考虑计算过程中的精度的问题,double 的数据是有小数点的,而uint8是0-255的整数,如果直接用uint8计算,会在计算过程中产生舍入误差,这种误差在图像的数据中是比较大的误差。显示的时候是因为我们的显示系统采用的颜色模式大多为RGB模式,其每一种颜色分量的取值只能在0-255,所以显示时要用uint8数据。

为什么要把图像转为灰度图进行处理? 我们识别物体,最关键的因素是梯度(现在很多的特征提取,SIFT,HOG等等本质都是梯度的统计信息),梯度意味着边缘,这是最本质的部分,而计算梯度,自然就用到灰度图像了。颜色本身,非常容易受到光照等因素的影响,同类的物体颜色有很多变化。所以颜色本身难以提供关键信息。

以上转自小波变换图像融合-1-代码分析


%任务2.3 %图像处理场景:图像边缘增强 clear; clc; %% I = imread('F:\学习\实验室\Matlab 图像处理练习\IMG_1106.jpg'); I = rgb2gray(I); I = im2double(I); figure('Numbertitle','off','name','原图像'); imshow(I); %梯度图 gradient = zeros(3024,4032); for i = 1:3023 for j = 1:4031 gx = abs(I(i+1,j) - I(i,j) ); gy = abs(I(i,j+1) - I(i,j) ); grad = gx + gy; gradient(i,j) = grad; end end figure('Numbertitle','off','name','gradient'); imshow(gradient); %合成 compose = I + gradient; compose = im2uint8(compose); figure('Numbertitle','off','name','合成'); imshow(compose);

最新回复(0)