✅博主简介:热爱Matlab仿真、Python定制开发者,修心和技术同步精进,Matlab、Python项目合作可私信。
🏆代码、数据集获取方式:私信博主
一、图像处理基础操作
1 图像预处理
图像预处理是图像处理流程中的第一步,旨在改善图像数据,消除不必要的扰动信息,增强一些图像特征,以便于后续处理。
- 灰度转换:将彩色图像转换为灰度图像,这是很多图像处理任务的首选形式,因为它简化了数据处理的复杂性。
function grayImage = convertToGray(inputImage) % 读取输入的彩色图像 rgbImage = imread(inputImage); % 将彩色图像转换为灰度图像 grayImage = rgb2gray(rgbImage); % 显示原始彩色图像和转换后的灰度图像 subplot(1, 2, 1); imshow(rgbImage); title('Original RGB Image'); subplot(1, 2, 2); imshow(grayImage); title('Gray Scale Image'); end
- 噪声去除:图像在获取或传输过程中可能引入噪声。常用的噪声去除技术包括中值滤波、高斯滤波等。
function denoisedImage = removeNoise(inputImage) % 读取输入的图像 noisyImage = imread(inputImage); % 使用中值滤波器去除噪声 denoisedImage = medfilt2(noisyImage); % 显示原始图像和去噪后的图像 subplot(1, 2, 1); imshow(noisyImage); title('Original Noisy Image'); subplot(1, 2, 2); imshow(denoisedImage); title('Denoised Image'); end
- 直方图均衡:改善图像的对比度,通过调整图像的直方图达到更广泛的亮度分布。
function equalizedImage = histogramEqualization(inputImage) % 读取输入的图像 originalImage = imread(inputImage); % 将图像转换为灰度图像 grayImage = rgb2gray(originalImage); % 进行直方图均衡化 equalizedImage = histeq(grayImage); % 显示原始图像和均衡化后的图像 subplot(1, 2, 1); imshow(grayImage); title('Original Gray Image'); subplot(1, 2, 2); imshow(equalizedImage); title('Equalized Image'); end
- 图像锐化:增强图像的边缘,提升图像的清晰度。常见方法包括拉普拉斯滤波和高通滤波。
function sharpenedImage = sharpenImage(inputImage) % 读取输入的图像 originalImage = imread(inputImage); % 将图像转换为灰度图像 grayImage = rgb2gray(originalImage); % 使用拉普拉斯滤波器进行图像锐化 laplacianFilter = [0, -1, 0; -1, 5, -1; 0, -1, 0]; sharpenedImage = imfilter(grayImage, laplacianFilter); % 显示原始灰度图像和锐化后的图像 subplot(1, 2, 1); imshow(grayImage); title('Original Gray Image'); subplot(1, 2, 2); imshow(sharpenedImage); title('Sharpened Image'); end
- 图像平滑:减少图像中的变化(如噪声),常用方法有均值滤波、高斯模糊等。
function smoothedImage = smoothImage(inputImage) % 读取输入的图像 originalImage = imread(inputImage); % 将图像转换为灰度图像 grayImage = rgb2gray(originalImage); % 使用均值滤波器进行图像平滑 filterSize = 3; % 设置滤波器大小 smoothingFilter = ones(filterSize) / filterSize^2; smoothedImage = imfilter(grayImage, smoothingFilter); % 显示原始灰度图像和平滑后的图像 subplot(1, 2, 1); imshow(grayImage); title('Original Gray Image'); subplot(1, 2, 2); imshow(smoothedImage); title('Smoothed Image'); end
2 图像分割
图像分割的目的是将图像细分为多个部分或对象,常用于识别图中的特定物体或区域。
- 阈值处理:根据像素值将图像分割成前景和背景,是最简单的分割技术。
- 边缘检测:识别图像中物体的边界。常用的算法有Sobel、Canny和Prewitt边缘检测器。
- 区域生长:从一个或多个种子点开始,根据预定的准则将像素或区域合并为更大的区域。
- 聚类方法:如K-means和Fuzzy C-means,这些方法根据像素之间的相似性将它们聚集在一起。
3 特征提取
图像的特征提取是为了减少需要处理的数据量,同时保留有用的信息。特征可以是边缘、角点、纹理等。
- 颜色特征:基于图像的颜色直方图,描述图像的颜色分布。
- 纹理特征:分析图像纹理的粗糙度、方向性等,如灰度共生矩阵(GLCM)。
- 形状特征:基于图像中物体的形状,这些特征可能包括面积、周长、质心等。
4 图像变换
图像变换是计算机图像处理中的重要部分,它涉及将图像从一种形式或表示转换为另一种形式或表示的操作。
- 几何变换:基于图像的缩放、旋转、平移、镜像翻转等;
- 傅里叶变换:将图像从空间域转换到频域,用于频域分析或滤波处理。
- 小波变换:分析图像的局部特征,包括纹理、边缘等,常用于图像压缩和特征提取。
- 膨胀与腐蚀:根据结构元素对图像进行膨胀或腐蚀操作,常用于图像增强和形状分析。
二、部分源代码
以下代码是一个 MATLAB GUI 应用程序,用于对图像进行加载、预处理、分割和特征提取的操作。
function loadImage(fig)
[file, path] = uigetfile({'*.jpg;*.png;*.bmp', 'Image Files (*.jpg, *.png, *.bmp)'});
if isequal(file, 0)
disp('图像加载已取消');
return;
end
fullFileName = fullfile(path, file);
img = imread(fullFileName);
imshow(img, 'Parent', fig.UserData.axImage);
fig.UserData.img = img;
end
function preprocessImage(fig)
if isempty(fig.UserData.img)
uialert(fig, '请先加载图像', '图像未加载');
return;
end
img = fig.UserData.img;
grayImg = rgb2gray(img);
imshow(grayImg, 'Parent', fig.UserData.axImage);
fig.UserData.preprocessedImg = grayImg;
end
function segmentImage(fig)
if isempty(fig.UserData.preprocessedImg)
uialert(fig, '请先进行图像预处理', '图像未预处理');
return;
end
preprocessedImg = fig.UserData.preprocessedImg;
level = graythresh(preprocessedImg);
bwImg = imbinarize(preprocessedImg, level);
imshow(bwImg, 'Parent', fig.UserData.axImage);
title(fig.UserData.axImage, '图像分割结果');
fig.UserData.segmentedImg = bwImg;
end