数字图像处理 第十章课后作业
文档地址:https://download.csdn.net/download/qq_44143405/12549552
如果不能下载请邮件联系(说明来意):[email protected]
第一题
10-2 设有一幅包含有水平直线、垂直直线、 方向直线和 -方向直线的二值图像。给出一组大小为 5×5 的模板,要求这些模板可用于检测这些直线中的1像素间断。假设直线和背景的灰度分别是1和0。
答:掩模将具有下图所示的系数。当每个遮罩以在该遮罩所偏向的方向上定向的连续 5 像素段的像素为中心时,每个遮罩将产生 0 值。相反,当一个掩模位于 5 像素段中的一个像素间隙上时,响应为 +4 ,该 5 像素段的方向是该掩模所偏向的方向。
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
1 |
1 |
-4 |
1 |
1 |
|
0 |
0 |
-4 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
水平直线掩模模块 垂直直线掩模模块
0 |
0 |
0 |
0 |
1 |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
0 |
1 |
0 |
0 |
0 |
0 |
0 |
-4 |
0 |
0 |
|
0 |
0 |
-4 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
|
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
1 |
45度直线掩模模块 -45度直线掩模模块
第二题
10-29 使用10.3.2节的基本全局阈值处理算法得到的阈值与起始点无关吗?如果您的回答是“是”,证明它,如果回答是“不”,给出一个例子。
附:
第一题代码块
Image=imread('pattern.jpg');
Th=graythresh(Image);
OriginBW=im2bw(Image,Th);
BW1=1-OriginBW;
se=strel('square',5);%结构元素为边长为5的正方形
BW2=1-imopen(BW1,se);
se45=strel('line',25,45);%结构元素为角度为45的线,长度为25个像素
BW3=1-imopen(BW1,se45);
se_45=strel('line',25,-45);%结构元素为角度为45的线,长度为25个像素
BW4=1-imopen(BW1,se_45);
figure;
subplot(221),imshow(OriginBW);title('原始二值图像');
subplot(222);imshow(BW2);title('矩形块提取');
subplot(223);imshow(BW3);title('45线段提取');
subplot(224);imshow(BW4);title('-45线段提取');
se0=strel('line',5,0);%结构元素为水平线,长度为25个像素
BW5=1-imopen(BW1,se0);
se90=strel('line',5,90);%结构元素为垂直的线,长度为25个像素
BW6=1-imopen(BW1,se90);
figure;
subplot(131),imshow(OriginBW);title('原始二值图像');
subplot(132),imshow(BW5);title('水平线段提取');
subplot(133);imshow(BW6);title('垂直线段提取');
第二题代码块
clear,clc,close all;
Image=rgb2gray(imread('lotus1.jpg'));
figure,imshow(Image),title('原始图像');
imhist(Image);
hist1=imhist(Image);
hist2=hist1;
iter=0;
while 1
[is,peak]=Bimodal(hist1);
if is==0
hist2(1)=(hist1(1)*2+hist1(2))/3;
for j=2:255
hist2(j)=(hist1(j-1)+hist1(j)+hist1(j+1))/3;
end
hist2(256)=(hist1(255)+hist1(256)*2)/3;
hist1=hist2;
iter=iter+1;
if iter>1000
break;
end
else
break;
end
end
[trough,pos]=min(hist1(peak(1):peak(2)));
thresh=pos+peak(1);
figure,stem(1:256,hist1,'Marker','none');
hold on
stem([thresh,thresh],[0,trough],'Linewidth',2);
hold off
result=zeros(size(Image));
result(Image>thresh)=1;
figure,imshow(result),title('基于双峰直方图的阈值化');
imwrite(result,'bilotus1.jpg');
Image=rgb2gray(imread('lotus1.jpg'));
figure,imshow(Image),title('原始图像');
T=graythresh(Image);
result1=im2bw(Image,T);
figure,imshow(result1),title('OTSU方法二值化图像 ');
figure,
subplot(221),imshow(Image),title('原始图像');
subplot(222),imhist(Image);
subplot(223),imshow(result),title('基于双峰直方图的阈值化');
subplot(224),imshow(result1),title('OTSU方法二值化图像 ');
function [is,peak]=Bimodal(histgram)
count=0;
for j=2:255
if histgram(j-1)
count=count+1;
peak(count)=j;
if count>2
is=0;
return;
end
end
end
if count==2
is=1;
else
is=0;
end
end