MATLAB中的局部阈值法
我试图在MATLAB中的局部阈值法,matlab,image-processing,Matlab,Image Processing,我试图在matlab7.7中实现localthresholding。这就是我的原始图像的样子: 如图所示,Test一词用黑色覆盖。此图像是一幅尺寸为919x551的PNG图像。我想对这个图像应用局部阈值,这样我就可以清楚地看到单词Test 我已经实现了下面的代码,它通过将整个图像分割成60*60块的子图像来工作 然而,当我这样做的时候,我没有得到想要的输出 我的代码: clc; clear all; close all; im = imread('C:\samples\test100.png
matlab7.7
中实现localthresholding
。这就是我的原始图像的样子:
如图所示,Test
一词用黑色覆盖。此图像是一幅尺寸为919x551的PNG
图像。我想对这个图像应用局部阈值,这样我就可以清楚地看到单词Test
我已经实现了下面的代码,它通过将整个图像分割成60*60块的子图像来工作
然而,当我这样做的时候,我没有得到想要的输出
我的代码:
clc;
clear all;
close all;
im = imread('C:\samples\test100.png');
subplot(3,3,1);
imshow(im);
title('original image');
im = rgb2gray(im);
im = double(im);
subplot(3,3,2);
imshow(im);
title('gray scale image');
[row col] = size(im);
max_im = max(max(im));
h = zeros(1,max_im+1);
!1st block
for n = 1:1:60
for m = 1:1:60
a(n,m) = im(n,m);
end
end
a = a+1;
for n = 1:1:60
for m = 1:1:60
t = a(n,m);
h(t) = h(t)+1;
end
end
subplot(3,3,3);
bar(h)
[X,Y] = ginput(1);
for n = 1:1:60
for m = 1:1:60
if a(n,m)<X
a(n,m) = 0;
else
a(n,m) = 255;
end
end
end
subplot(3,3,4);
imshow(uint8(a))
title('1st block image');
!2nd block
for n = 1:1:60
for m = 61:1:60
b(n,m-60) = im(n,m)
end
end
b = b+1;
for n = 1:1:60
for m = 1:1:60
t = b(n,m);
h(t) = h(t)+1;
end
end
figure(2)
bar(h)
[X,Y] = ginput(1);
for n = 1:1:60
if b(n,m)<X
b(n,m) = 0;
else
b(n,m) = 255;
end
end
imshow(uint8(b))
!3rd block
for n = 61:1:120
for m = 1:1:60
c(n-60,m) = im(n,m);
end
end
c = c+1;
for n = 1:1:60
for m = 1:1:60
t = c(n,m);
h(t) = h(t)+1;
end
end
figure(3)
bar(h)
[X,Y] = ginput(1);
for n = 1:1:60
for m = 1:1:60
if c(n,m)< X
c(n,m) = 0;
else
c(n,m) = 255;
end
end
end
imshow(uint8(c))
!final block
for n = 1:1:row
for m = 61:1:col
d(n-60,m-60) = im(n,m);
end
end
d = d+1;
for n = 1:1:60
for m = 1:1:60
t = d(n,m);
h(t) = h(t)+1;
end
end
figure(4);
bar(h);
[X,Y] = ginput(1);
for n = 1:1:60
for m = 1:1:60
if d(n,m)<X
d(n,m) = 0;
else
d(n,m) = 255;
end
end
end
imshow(uint8(d))
s = [a b;c d];
figure(5);
imshow(uint(s))
clc;
清除所有;
全部关闭;
im=imread('C:\samples\test100.png');
子批次(3,3,1);
imshow(im);
标题(“原始图像”);
im=RGB2灰色(im);
im=双(im);
子批次(3,3,2);
imshow(im);
标题(“灰度图像”);
[行列]=大小(im);
max_im=max(max(im));
h=零(1,最大值im+1);
!第一街区
对于n=1:1:60
对于m=1:1:60
a(n,m)=im(n,m);
结束
结束
a=a+1;
对于n=1:1:60
对于m=1:1:60
t=a(n,m);
h(t)=h(t)+1;
结束
结束
子批次(3,3,3);
巴(小时)
[X,Y]=ginput(1);
对于n=1:1:60
对于m=1:1:60
如果a(n,m)您可以水平扫描灰度图像,然后找到非零(或高于阈值)值的位置,并将该间隔设置为白色(256或1,如果使用)
j=1:551的
行=im(:,j)
测试=0;
im2=零(尺寸(im))
i=0;
%左黑区
while(test==0&&ithreshold
测试=1;
结束;
i=i+1;
结束;
%白色内部区域
while(test==1&&ithreshold
测试=0;
结束;
i=i+1;
结束;
%左黑区
你能提供一个链接来解释“局部阈值”吗如何解决子图像的问题?你如何确定阈值?@ParthDoshi你说你想应用局部阈值,我认为你心里有一个值;无论如何,在完全黑色的背景下,你可以使用一个小值,例如0.1,但你可以根据需要调整它,以改变灵敏度
for j=1:551
row = im(:,j)
test = 0;
im2=zeros(size(im))
i=0;
%Left black area
while (test == 0 && i<919)
im2(i,j)=0;
if row(i)>threshold
test=1;
end;
i=i+1;
end;
%White inner area
while (test == 1 && i<919)
im2(i,j)=1
if row(i)>threshold
test=0;
end;
i=i+1;
end;
%Left black area
while (i<919)
im2(i,j)=0;
i=i+1;
end;