图像处理 #

一、图像基础 #

1.1 读取和显示 #

matlab
% 读取图像
img = imread('image.jpg');
img = imread('image.png');

% 显示图像
imshow(img);
figure; imshow(img);

% 显示信息
whos img;
size(img);      % 尺寸
class(img);     % 数据类型

1.2 图像类型 #

matlab
% 灰度图像
gray = rgb2gray(img);

% 二值图像
bw = imbinarize(gray);

% 索引图像
[X, map] = imread('indexed.png');

% RGB图像
R = img(:,:,1);
G = img(:,:,2);
B = img(:,:,3);

1.3 保存图像 #

matlab
% 保存图像
imwrite(img, 'output.jpg');
imwrite(img, 'output.png');
imwrite(img, 'output.jpg', 'Quality', 95);

二、图像增强 #

2.1 对比度调整 #

matlab
% 直方图均衡化
img_eq = histeq(gray);

% 自适应直方图均衡化
img_adapteq = adapthisteq(gray);

% 对比度拉伸
img_stretch = imadjust(gray, [0.2 0.8], []);

% 显示直方图
imhist(gray);

2.2 亮度调整 #

matlab
% 伽马校正
img_gamma = imadjust(gray, [], [], 0.5);

% 对数变换
img_log = log(1 + double(gray));

% 幂次变换
img_power = double(gray).^0.5;

2.3 颜色处理 #

matlab
% RGB到其他颜色空间
hsv = rgb2hsv(img);
lab = rgb2lab(img);
ycbcr = rgb2ycbcr(img);

% 颜色分割
red_mask = img(:,:,1) > 200 & img(:,:,2) < 50 & img(:,:,3) < 50;

三、图像滤波 #

3.1 平滑滤波 #

matlab
% 均值滤波
h = fspecial('average', [5 5]);
img_blur = imfilter(gray, h);

% 高斯滤波
h = fspecial('gaussian', [5 5], 2);
img_gaussian = imfilter(gray, h);

% 中值滤波
img_median = medfilt2(gray, [5 5]);

3.2 锐化滤波 #

matlab
% 拉普拉斯锐化
h = fspecial('laplacian', 0.5);
img_sharp = gray - imfilter(gray, h);

% Unsharp masking
h = fspecial('unsharp');
img_unsharp = imfilter(gray, h);

3.3 边缘检测 #

matlab
% Sobel边缘
edges = edge(gray, 'sobel');

% Canny边缘
edges = edge(gray, 'canny');

% Prewitt边缘
edges = edge(gray, 'prewitt');

% Roberts边缘
edges = edge(gray, 'roberts');

% LoG边缘
edges = edge(gray, 'log');

四、形态学操作 #

4.1 基本操作 #

matlab
% 创建结构元素
se = strel('disk', 5);
se = strel('square', 5);

% 膨胀
img_dilate = imdilate(bw, se);

% 腐蚀
img_erode = imerode(bw, se);

% 开运算
img_open = imopen(bw, se);

% 闭运算
img_close = imclose(bw, se);

4.2 高级操作 #

matlab
% 形态学梯度
img_grad = imgradient(bw, se);

% 顶帽变换
img_tophat = imtophat(gray, se);

% 底帽变换
img_bothat = imbothat(gray, se);

% 骨架化
img_skeleton = bwmorph(bw, 'skel', Inf);

% 细化
img_thin = bwmorph(bw, 'thin', Inf);

五、图像分割 #

5.1 阈值分割 #

matlab
% 全局阈值
level = graythresh(gray);
bw = imbinarize(gray, level);

% 自适应阈值
bw = imbinarize(gray, 'adaptive');

% Otsu方法
level = graythresh(gray);
bw = imbinarize(gray, level);

5.2 区域分割 #

matlab
% 区域生长
bw = imbinarize(gray);
bw_fill = imfill(bw, 'holes');

% 连通区域
[labeled, num] = bwlabel(bw);
stats = regionprops(labeled, 'Area', 'Centroid');

% 分水岭分割
D = -bwdist(~bw);
L = watershed(D);

5.3 颜色分割 #

matlab
% 使用颜色空间
hsv = rgb2hsv(img);
hue = hsv(:,:,1);
mask = hue > 0.9 | hue < 0.1;  % 红色区域

六、图像变换 #

6.1 几何变换 #

matlab
% 缩放
img_scaled = imresize(img, 0.5);
img_scaled = imresize(img, [256 256]);

% 旋转
img_rotated = imrotate(img, 45);

% 翻转
img_flip_h = flip(img, 2);  % 水平翻转
img_flip_v = flip(img, 1);  % 垂直翻转

% 裁剪
img_crop = imcrop(img, [100 100 200 200]);

6.2 仿射变换 #

matlab
% 创建变换矩阵
tform = affine2d([1 0 0; 0.5 1 0; 0 0 1]);
img_transformed = imwarp(img, tform);

% 平移
tform = translate2d([50, 100]);

% 缩放
tform = scale2d([0.5, 0.5]);

七、特征检测 #

7.1 角点检测 #

matlab
% Harris角点
corners = detectHarrisFeatures(gray);
imshow(gray); hold on;
plot(corners);

% FAST角点
corners = detectFASTFeatures(gray);

7.2 斑点检测 #

matlab
% 检测斑点
blobs = detectBlob(gray);
imshow(gray); hold on;
plot(blobs);

7.3 SURF特征 #

matlab
% SURF特征点
points = detectSURFFeatures(gray);
[features, valid_points] = extractFeatures(gray, points);

% 特征匹配
points1 = detectSURFFeatures(gray1);
points2 = detectSURFFeatures(gray2);
[features1, valid_points1] = extractFeatures(gray1, points1);
[features2, valid_points2] = extractFeatures(gray2, points2);

indexPairs = matchFeatures(features1, features2);
matchedPoints1 = valid_points1(indexPairs(:, 1));
matchedPoints2 = valid_points2(indexPairs(:, 2));

八、实用示例 #

8.1 图像去噪 #

matlab
% 读取含噪图像
img = imread('noisy.png');
gray = rgb2gray(img);

% 高斯滤波
h = fspecial('gaussian', [5 5], 1.5);
denoised = imfilter(gray, h);

% 中值滤波(对椒盐噪声更有效)
denoised_median = medfilt2(gray, [3 3]);

% 显示结果
subplot(1, 3, 1); imshow(gray); title('原图');
subplot(1, 3, 2); imshow(denoised); title('高斯滤波');
subplot(1, 3, 3); imshow(denoised_median); title('中值滤波');

8.2 目标计数 #

matlab
% 读取图像
img = imread('objects.png');
gray = rgb2gray(img);

% 二值化
bw = imbinarize(gray);

% 填充孔洞
bw_fill = imfill(bw, 'holes');

% 连通区域标记
[labeled, num] = bwlabel(bw_fill);

% 获取属性
stats = regionprops(labeled, 'Area', 'Centroid', 'BoundingBox');

% 显示结果
imshow(img); hold on;
for i = 1:num
    rectangle('Position', stats(i).BoundingBox, ...
              'EdgeColor', 'r', 'LineWidth', 2);
end
fprintf('检测到 %d 个目标\n', num);

九、总结 #

本章学习了:

  1. 图像基础:读取、显示、保存
  2. 图像增强:对比度、亮度调整
  3. 图像滤波:平滑、锐化、边缘检测
  4. 形态学操作:膨胀、腐蚀、开闭运算
  5. 图像分割:阈值、区域分割
  6. 图像变换:几何变换、仿射变换
  7. 特征检测:角点、斑点、SURF

下一章将学习优化工具。

最后更新:2026-03-27