于matlab的鸟类图像处理gui,包含76张鸟类图像,可以实现对图像的: 中值滤波 k-means分割 闭运算 灰度化 傅里叶变换 腐蚀操作 Canny边缘检测 直方图均衡化 自适应阈值分【无标题】
于matlab的鸟类图像处理gui,包含76张鸟类图像,可以实现对图像的:中值滤波k-means分割闭运算灰度化傅里叶变换腐蚀操作Canny边缘检测直方图均衡化自适应阈值分割膨胀操作Sobel边缘检测高斯滤波区域生长分割开运算Prewitt边缘检测可以更换自己的图像,可供学习和参考!
于matlab的鸟类图像处理gui,包含76张鸟类图像,可以实现对图像的:
中值滤波
k-means分割
闭运算
灰度化
傅里叶变换
腐蚀操作
Canny边缘检测
直方图均衡化
自适应阈值分割
膨胀操作
Sobel边缘检测
高斯滤波
区域生长分割
开运算
Prewitt边缘检测
可以更换自己的图像,可供学习和参考!
创建一个包含多种图像处理功能的MATLAB GUI,尤其是针对76张鸟类图像的处理,可以通过MATLAB的GUIDE(GUI Development Environment)或使用程序化的方式创建。下面我将提供一个基本框架,请注意,由于代码量较大,这里只提供关键部分的示例代码,并假设你对MATLAB和其GUI开发有一定了解。
步骤1: 创建GUI
你可以通过MATLAB的guide命令来启动GUIDE并创建一个新的GUI。或者直接使用以下代码作为起点:
matlab
function BirdImageProcessingGUI
% 创建窗口
figure(‘Name’, ‘Bird Image Processing GUI’, ‘NumberTitle’, ‘off’, ‘Position’, [100, 100, 800, 600]);
% 添加按钮、下拉菜单等控件
uicontrol(‘Style’, ‘pushbutton’, ‘String’, ‘加载图像’, ‘Position’, [20, 550, 100, 30], ‘Callback’, @loadImage);
uicontrol(‘Style’, ‘pushbutton’, ‘String’, ‘中值滤波’, ‘Position’, [130, 550, 100, 30], ‘Callback’, @medianFiltering);
% 添加其他按钮…
% 图像显示区域
hAxes = axes(‘Units’, ‘pixels’, ‘Position’, [20, 100, 760, 440]);
axis off;
end
% 按钮回调函数
function loadImage(~, ~)
[filename, pathname] = uigetfile({‘.jpg;.jpeg;.png;.bmp’, ‘所有支持的图片’; ‘.’,‘所有文件’}, ‘选择一张图片’);
if isequal(filename,0) isequal(pathname,0)
disp(‘用户取消选择’);
else
originalImage = imread(fullfile(pathname, filename));
imshow(originalImage);
end
end
function medianFiltering(~, ~)
% 示例:获取当前图像并应用中值滤波
currentImage = getimage(gca);
filteredImage = medfilt2(currentImage);
imshow(filteredImage);
end
% 其他处理函数可以根据类似模式添加
步骤2: 实现各种图像处理功能
对于每种图像处理操作,可以定义对应的回调函数,如上述medianFiltering函数所示。下面是几种操作的简要说明:
灰度化: 使用rgb2gray函数。
傅里叶变换: 使用fft2进行二维快速傅里叶变换。
Canny边缘检测: 使用edge(I,‘Canny’)。
直方图均衡化: 使用histeq。
自适应阈值分割: 使用adapthisteq。
Sobel/Prewitt边缘检测: 使用edge(I,‘sobel’) 或 edge(I,‘prewitt’)。
高斯滤波: 使用imgaussfilt。
腐蚀/膨胀/开运算/闭运算: 使用imerode, imdilate, imopen, imclose。
k-means分割: 使用kmeans,但需要先将图像转换为适合聚类的形式。
区域生长分割: 可以手动实现或寻找现有的MATLAB函数/工具箱。
步骤3: 整合与测试
整合所有的处理函数到GUI中,并确保它们能够正确地工作。你可以通过在每个按钮的回调函数中调用相应的处理函数来实现这一点。例如,在上面的例子中,medianFiltering函数展示了如何获取当前图像并应用中值滤波。
注意事项
确保你已经加载了所需的图像处理工具箱,因为一些函数可能依赖于它。
根据你的需求调整GUI的设计和布局。
测试每个功能,确保它们按预期工作,并根据需要优化性能。
MATLAB 图像处理 GUI 程序,支持:
上传图像(支持 JPG/PNG/BMP)
多种图像处理操作:
灰度化
直方图均衡化
高斯滤波
中值滤波
傅里叶变换(频域图像)
k-means 分割
自适应阈值分割
区域生长分割
腐蚀/膨胀/开运算/闭运算
Canny/Sobel/Prewitt 边缘检测
✅ 支持 任意图像上传,界面简洁清晰,适合教学与学习。
📁 文件结构建议
BirdImageProcessing/
├── main_gui.m % 主程序(GUI)
└── process_image.m % 图像处理函数库
✅ 1. 主程序:main_gui.m
matlab
%% 基于MATLAB的鸟类图像处理GUI
% 支持多种图像处理功能,适用于教学与研究
function main_gui()
% 创建主窗口
fig = figure(‘Name’, ‘基于MATLAB的图像处理’, …
‘NumberTitle’, ‘off’, …
‘Position’, [300, 200, 800, 600], …
‘MenuBar’, ‘none’);
% 设置背景颜色
set(fig, ‘Color’, ‘w’);
% 显示说明文字
uicontrol(‘Style’, ‘text’, ‘String’, ‘上传图像后点击处理按钮’, …
‘Position’, [50, 500, 200, 20], ‘FontSize’, 10);
% 图像显示区域
ax1 = axes(‘Parent’, fig, ‘Position’, [0.05, 0.4, 0.3, 0.5]);
axis off;
ax2 = axes(‘Parent’, fig, ‘Position’, [0.37, 0.4, 0.3, 0.5]);
axis off;
% 按钮布局
buttons = {
‘上传图像’, ‘灰度化’, ‘直方图均衡化’, ‘高斯滤波’,
‘中值滤波’, ‘傅里叶变换’, ‘自适应阈值分割’, ‘区域生长分割’,
‘k-means分割’, ‘腐蚀操作’, ‘膨胀操作’, ‘开运算’,
‘闭运算’, ‘Canny边缘检测’, ‘Sobel边缘检测’, ‘Prewitt边缘检测’
};
positions = [0.05, 0.1, 0.1, 0.05]; % [x, y, width, height]
buttonPos = positions;
% 存储按钮句柄
btnHandles = cell(1, length(buttons));
for i = 1:length(buttons)
btnHandles{i} = uicontrol(‘Parent’, fig, ‘Style’, ‘pushbutton’, …
‘String’, buttons{i}, …
‘Position’, [buttonPos(1) + (i-1)0.07, buttonPos(2), buttonPos(3), buttonPos(4)], …
‘Callback’, {@button_callback, i});
end
% 初始化变量
global originalImage processedImage ax1 ax2
originalImage = [];
processedImage = [];
% 默认显示示例图像(可选)
% imshow(imread(‘example_bird.jpg’), ‘Parent’, ax1);
end
%% 按钮回调函数
function button_callback(hObject, eventdata, buttonIndex)
global originalImage processedImage ax1 ax2
switch buttonIndex
case 1 % 上传图像
[filename, pathname] = uigetfile({‘.jpg;.jpeg;.png;.bmp’, ‘图像文件 (.jpg, .jpeg, .png, *.bmp)’}, ‘选择图像’);
if isequal(filename,0) isequal(pathname,0)
return;
end
originalImage = imread(fullfile(pathname, filename));
imshow(originalImage, ‘Parent’, ax1);
processedImage = originalImage;
case 2 % 灰度化
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
processedImage = grayImg;
imshow(processedImage, ‘Parent’, ax2);
case 3 % 直方图均衡化
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
eqImg = histeq(grayImg);
processedImage = eqImg;
imshow(processedImage, ‘Parent’, ax2);
case 4 % 高斯滤波
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
filtered = imgaussfilt(grayImg, 2);
processedImage = filtered;
imshow(processedImage, ‘Parent’, ax2);
case 5 % 中值滤波
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
filtered = medfilt2(grayImg);
processedImage = filtered;
imshow(processedImage, ‘Parent’, ax2);
case 6 % 傅里叶变换
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
F = fft2(grayImg);
F_shift = fftshift(F);
magnitude = log(1 + abs(F_shift));
processedImage = magnitude;
imshow(processedImage, ‘Parent’, ax2);
case 7 % 自适应阈值分割
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
thresh = adapthisteq(grayImg);
binary = imbinarize(thresh);
processedImage = binary;
imshow(processedImage, ‘Parent’, ax2);
case 8 % 区域生长分割(简化版)
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
% 简单实现:以中心点为种子进行区域生长
seeds = [size(grayImg)/2];
mask = zeros(size(grayImg));
mask(seeds(1), seeds(2)) = 1;
for i = 1:10
temp = imdilate(mask, ones(3));
temp = temp & (abs(grayImg - grayImg(seeds(1), seeds(2))) < 30);
mask = mask temp;
end
processedImage = mask;
imshow(processedImage, ‘Parent’, ax2);
case 9 % k-means分割
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
I = originalImage;
I = im2double(I);
I = reshape(I, [], 3); % 转换为像素向量
k = 2;
idx = kmeans(I, k);
segmented = reshape(idx, size(I));
processedImage = segmented;
colormap(parula(k));
imagesc(processedImage);
axis image;
hold on;
caxis([1, k]);
set(ax2, ‘CurrentAxes’, ax2);
axis off;
hold off;
case 10 % 腐蚀操作
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
se = strel(‘disk’, 1);
eroded = imerode(grayImg, se);
processedImage = eroded;
imshow(processedImage, ‘Parent’, ax2);
case 11 % 膨胀操作
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
se = strel(‘disk’, 1);
dilated =imdilate(grayImg, se);
processedImage = dilated;
imshow(processedImage, ‘Parent’, ax2);
case 12 % 开运算
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
se = strel(‘disk’, 1);
opened = imopen(grayImg, se);
processedImage = opened;
imshow(processedImage, ‘Parent’, ax2);
case 13 % 闭运算
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
se = strel(‘disk’, 1);
closed = imclose(grayImg, se);
processedImage = closed;
imshow(processedImage, ‘Parent’, ax2);
case 14 % Canny边缘检测
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
edges = edge(grayImg, ‘Canny’);
processedImage = edges;
imshow(processedImage, ‘Parent’, ax2);
case 15 % Sobel边缘检测
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
edges = edge(grayImg, ‘Sobel’);
processedImage = edges;
imshow(processedImage, ‘Parent’, ax2);
case 16 % Prewitt边缘检测
if isempty(originalImage)
errordlg(‘请先上传图像!’, ‘错误’);
return;
end
grayImg = rgb2gray(originalImage);
edges = edge(grayImg, ‘Prewitt’);
processedImage = edges;
imshow(processedImage, ‘Parent’, ax2);
end
end
✅ 2. 使用说明
- 将上述代码保存为 main_gui.m 文件。
- 在 MATLAB 中运行 main_gui()。
- 点击“上传图像”选择一张鸟类图片。
- 点击其他按钮查看不同处理效果。
🔧 扩展建议
添加 保存结果图像 功能
支持 多图像批量处理
加入 参数调节滑块(如高斯滤波σ值)
导出为 PDF报告
📂 示例图像
你可以将你的 76张鸟类图像 放在项目目录下,或通过 uigetfile 动态加载。
✅ 输出效果
左侧:原始图像
右侧:处理后的图像
按钮响应即时,界面友好
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)