利用直方图进行阈值分割matlab
时间: 2023-10-13 11:05:04 浏览: 261
在MATLAB中,可以使用imhist函数获取图像的直方图,然后使用imbinarize函数根据设定的阈值将图像二值化。
以下是一个示例代码:
```matlab
% 读取图像
img = imread('example.jpg');
% 计算直方图
hist = imhist(img);
% 显示直方图
figure;
stem(hist);
% 设定阈值
threshold = 100;
% 将图像二值化
binImg = imbinarize(img, threshold/255);
% 显示原图和二值化结果
figure;
subplot(1,2,1);
imshow(img);
title('Original Image');
subplot(1,2,2);
imshow(binImg);
title('Binary Image');
```
在上面的代码中,我们首先使用imhist函数计算图像的直方图,并用stem函数显示出来。然后我们设定一个阈值,将其除以255以将其归一化到0到1之间,然后使用imbinarize函数将图像二值化。最后我们将原图和二值化结果显示出来。
你可以根据自己的需要修改阈值,来得到不同的二值化结果。
相关问题
使用matlab读出一幅灰度图像,得到图像的直方图,根据直方图选取阈值对图像进行阈值分割。再用大津法对图像进行阈值分割。将分割出的目标用原来的彩色显示。
以下是使用Matlab实现读取灰度图像、计算直方图、阈值分割和彩色显示的代码。其中使用了imhist、imread、im2bw和ind2rgb等Matlab自带函数。代码中注释对应的是代码执行的步骤:
```matlab
% 读取灰度图像
I_gray = imread('lena_gray.jpg');
% 显示灰度图像
figure();
imshow(I_gray);
title('灰度图像');
% 计算灰度图像的直方图
figure();
imhist(I_gray);
title('灰度图像直方图');
% 根据直方图选取阈值进行阈值分割
thresh = 100; % 选取阈值
I_bw = im2bw(I_gray, thresh/255); % 阈值分割
% 显示二值化图像
figure();
imshow(I_bw);
title(['阈值分割二值化图像(阈值:', num2str(thresh), ')']);
% 使用大津法进行阈值分割
level = graythresh(I_gray);
I_bw2 = im2bw(I_gray, level); % 阈值分割
% 显示二值化图像
figure();
imshow(I_bw2);
title(['大津法阈值分割二值化图像(阈值:', num2str(level), ')']);
% 将分割出的目标用原来的彩色显示
I_rgb = imread('lena_color.jpg');
I_color = ind2rgb(I_bw, I_rgb); % 彩色显示
% 显示彩色图像
figure();
imshow(I_color);
title('阈值分割彩色图像');
I_color2 = ind2rgb(I_bw2, I_rgb); % 彩色显示
% 显示彩色图像
figure();
imshow(I_color2);
title('大津法阈值分割彩色图像');
```
执行以上代码后,会分别弹出五个图像窗口,分别是原始灰度图像、灰度图像直方图、阈值分割二值化图像、大津法阈值分割二值化图像和阈值分割彩色图像/大津法阈值分割彩色图像。
编写matlab代码,利用直方图确定阈值,对受噪声污染的指纹图片Fig0734.png进行分割,展示原图、直方图、分割后的图片(0、1二值图)。
好的,下面是matlab代码实现:
```matlab
% 加载图片
img = imread('Fig0734.png');
% 显示原图
subplot(1,3,1);
imshow(img);
title('原图');
% 绘制直方图
subplot(1,3,2);
imhist(img);
title('直方图');
% 利用直方图确定阈值
level = graythresh(img);
% 对图像进行二值化处理
bw = imbinarize(img, level);
% 显示二值化后的图像
subplot(1,3,3);
imshow(bw);
title('分割后的图片');
```
运行代码后,会弹出一个窗口,分别展示原图、直方图和分割后的二值图像。其中,利用 `graythresh` 函数可以自动计算出合适的阈值,将图像二值化,得到分割后的二值图像。
阅读全文