DIP第十章习题解答

数字图像处理 第十章课后作业

文档地址: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

 

你可能感兴趣的:(数字图像处理(DIP))