找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1442|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

matlab圖像處理程序 關(guān)于二值化

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:898840 發(fā)表于 2021-3-31 08:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
i4=im2double(J);

[L,num]=bwlabel(i4,8); % 區(qū)域標(biāo)記

figure,imagesc(L);axis tight;axis equal; %標(biāo)記顏色顯示

[r,c] = find(L == 1);%調(diào)用標(biāo)記區(qū)域

MIN1 = min(c)-5;           %計(jì)算橫最小坐標(biāo)點(diǎn)
MIN2 = min(r)-5;           %計(jì)算縱最小坐標(biāo)點(diǎn)
MAX1 = max(c)+5;           %計(jì)算橫最大坐標(biāo)點(diǎn)
MAX2 = max(r)+5;           %計(jì)算縱最大坐標(biāo)點(diǎn)

%數(shù)值檢查,顯示初步框選區(qū)域
  if(MIN1 > 0)
      MMIN1=MIN1;
  else
      MMIN1 = 1;
end
if(MIN2 > 0)
  MMIN2=MIN2;
else
      MMIN2 = 1;
end
[mm nn] = size(i4);
if(MAX1 < nn)
      MMAX1=MAX1;
else
      MMAX1 = nn-1;
end
if(MAX2 < mm)
      MMAX2=MAX2;
else
      MMAX2 = mm-1;
end

cxk=i4(MMIN2:MMAX2,MMIN1:MMAX1); %將初步框選區(qū)域保存
%figure,imshow(1-cxk);           %顯示初步框選區(qū)域
  %邊緣檢測(cè)
[BW1,thresh1]=edge(cxk,'roberts');  %Roberts邊緣算子
[BW2,thresh2]=edge(cxk,'sobel');    %Sobel邊緣算子
[BW3,thresh3]=edge(cxk,'prewitt');  %Prewitt邊緣算子
subplot(2,2,1);
imshow(cxk);           %顯示初步框選區(qū)域
subplot(2,2,2);
imshow(BW1);           %顯示Roberts邊緣算子結(jié)果
subplot(2,2,3);
imshow(BW2);           %顯示Sobel邊緣算子結(jié)果
subplot(2,2,4);
imshow(BW3);           %顯示Prewitt邊緣算子結(jié)果
CXKK=im2double(BW1);

%投影
im=CXKK;

[m n]=size(im); % m n分別為圖像的行 列數(shù)
% 進(jìn)行垂直投影
for y=1:n
     V1(y)=sum(im(1:m,y));
end
% 進(jìn)行水平投影
for x=1:m
   V2(x)=sum(im(x,:));
end
%投影結(jié)果
Q1=im2bw(V1);   %算長(zhǎng)
i1=sum(Q1,2)-1;
Q2=im2bw(V2);   %算寬
i2=sum(Q2,2)-1;
%計(jì)算四點(diǎn)坐標(biāo)

[LL,num2]=bwlabel(BW1,8); % 區(qū)域標(biāo)記
[rr,cc] = find(LL == 1);%調(diào)用標(biāo)記區(qū)域


MINN1=min(rr)+MIN1;    %橫最小
MINN2=min(cc)+MIN2+4;    %縱最小

aaaaa(1,:)=[MINN1;MINN2];       %左上點(diǎn)坐標(biāo)
bbbbb(1,:)=[MINN1+i1;MINN2];    %右上點(diǎn)坐標(biāo)
ccccc(1,:)=[MINN1;MINN2+i2];    %左下點(diǎn)坐標(biāo)
ddddd(1,:)=[MINN1+i1;MINN2+i2]; %右下點(diǎn)坐標(biāo)



imshow(1-i4)         % 顯示二值化圖像
hold on
plot([MINN1 MINN1+i1],[MINN2 MINN2],'m','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'m','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'m','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'m','LineWidth',2)
plot([MINN1 MINN1+i1],[MINN2 MINN2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'mo','LineWidth',2)

V1=0;
V2=0;
Q1=0;
Q2=0;
i1=0;
i2=0;

%2222222222
[r,c] = find(L == 2);%調(diào)用標(biāo)記區(qū)域

MIN1 = min(c)-5;           %計(jì)算橫最小坐標(biāo)點(diǎn)
MIN2 = min(r)-5;           %計(jì)算縱最小坐標(biāo)點(diǎn)
MAX1 = max(c)+5;           %計(jì)算橫最大坐標(biāo)點(diǎn)
MAX2 = max(r)+5;           %計(jì)算縱最大坐標(biāo)點(diǎn)

%數(shù)值檢查,顯示初步框選區(qū)域
  if(MIN1 > 0)
      MMIN1=MIN1;
  else
      MMIN1 = 1;
end
if(MIN2 > 0)
  MMIN2=MIN2;
else
      MMIN2 = 1;
end
[mm nn] = size(i4);
if(MAX1 < nn)
      MMAX1=MAX1;
else
      MMAX1 = nn-1;
end
if(MAX2 < mm)
      MMAX2=MAX2;
else
      MMAX2 = mm-1;
end

cxk=i4(MMIN2:MMAX2,MMIN1:MMAX1); %將初步框選區(qū)域保存
%figure,imshow(1-cxk);           %顯示初步框選區(qū)域
  %邊緣檢測(cè)
[BW1,thresh1]=edge(cxk,'roberts');  %Roberts邊緣算子
[BW2,thresh2]=edge(cxk,'sobel');    %Sobel邊緣算子
[BW3,thresh3]=edge(cxk,'prewitt');  %Prewitt邊緣算子
%subplot(2,2,1);
%imshow(cxk);           %顯示初步框選區(qū)域
%subplot(2,2,2);
%imshow(BW1);           %顯示Roberts邊緣算子結(jié)果
%subplot(2,2,3);
%imshow(BW2);           %顯示Sobel邊緣算子結(jié)果
%subplot(2,2,4);
%imshow(BW3);           %顯示Prewitt邊緣算子結(jié)果
CXKK=im2double(BW1);

%投影
im=CXKK;

[m n]=size(im); % m n分別為圖像的行 列數(shù)
% 進(jìn)行垂直投影
for y=1:n
     V1(y)=sum(im(1:m,y));
end
% 進(jìn)行水平投影
for x=1:m
   V2(x)=sum(im(x,:));
end
%投影結(jié)果
Q1=im2bw(V1);   %算長(zhǎng)
i1=sum(Q1,2);
Q2=im2bw(V2);   %算寬
i2=sum(Q2,2);
%計(jì)算四點(diǎn)坐標(biāo)

[LL,num2]=bwlabel(BW1,8); % 區(qū)域標(biāo)記
[rr,cc] = find(LL == 1);%調(diào)用標(biāo)記區(qū)域


MINN1=MIN1+min(rr)+3;    %橫最小
MINN2=MIN2+min(cc);    %縱最小

aaaaa(2,:)=[MINN1;MINN2];       %左上點(diǎn)坐標(biāo)
bbbbb(2,:)=[MINN1+i1;MINN2];    %右上點(diǎn)坐標(biāo)
ccccc(2,:)=[MINN1;MINN2+i2];    %左下點(diǎn)坐標(biāo)
ddddd(2,:)=[MINN1+i1;MINN2+i2]; %右下點(diǎn)坐標(biāo)


hold on
plot([MINN1 MINN1+i1],[MINN2 MINN2],'m','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'m','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'m','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'m','LineWidth',2)
plot([MINN1 MINN1+i1],[MINN2 MINN2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'mo','LineWidth',2)
V1=0;
V2=0;
Q1=0;
Q2=0;
i1=0;
i2=0;


%3333333333333
[r,c] = find(L == 4);%調(diào)用標(biāo)記區(qū)域

MIN1 = min(c)-5;           %計(jì)算橫最小坐標(biāo)點(diǎn)
MIN2 = min(r)-5;           %計(jì)算縱最小坐標(biāo)點(diǎn)
MAX1 = max(c)+5;           %計(jì)算橫最大坐標(biāo)點(diǎn)
MAX2 = max(r)+5;           %計(jì)算縱最大坐標(biāo)點(diǎn)

%數(shù)值檢查,顯示初步框選區(qū)域
  if(MIN1 > 0)
      MMIN1=MIN1;
  else
      MMIN1 = 1;
end
if(MIN2 > 0)
  MMIN2=MIN2;
else
      MMIN2 = 1;
end
[mm nn] = size(i4);
if(MAX1 < nn)
      MMAX1=MAX1;
else
      MMAX1 = nn-1;
end
if(MAX2 < mm)
      MMAX2=MAX2;
else
      MMAX2 = mm-1;
end

cxk=i4(MMIN2:MMAX2,MMIN1:MMAX1); %將初步框選區(qū)域保存
%figure,imshow(1-cxk);           %顯示初步框選區(qū)域
  %邊緣檢測(cè)
[BW1,thresh1]=edge(cxk,'roberts');  %Roberts邊緣算子
[BW2,thresh2]=edge(cxk,'sobel');    %Sobel邊緣算子
[BW3,thresh3]=edge(cxk,'prewitt');  %Prewitt邊緣算子
%subplot(2,2,1);
%imshow(cxk);           %顯示初步框選區(qū)域
%subplot(2,2,2);
%imshow(BW1);           %顯示Roberts邊緣算子結(jié)果
%subplot(2,2,3);
%imshow(BW2);           %顯示Sobel邊緣算子結(jié)果
%subplot(2,2,4);
%imshow(BW3);           %顯示Prewitt邊緣算子結(jié)果
CXKK=im2double(BW1);

%投影
im=CXKK;

[m n]=size(im); % m n分別為圖像的行 列數(shù)
% 進(jìn)行垂直投影
for y=1:n
     V1(y)=sum(im(1:m,y));
end
% 進(jìn)行水平投影
for x=1:m
   V2(x)=sum(im(x,:));
end
%投影結(jié)果
Q1=im2bw(V1);   %算長(zhǎng)
i1=sum(Q1,2)-1;
Q2=im2bw(V2);   %算寬
i2=sum(Q2,2)-1;
%計(jì)算四點(diǎn)坐標(biāo)

[LL,num2]=bwlabel(BW1,8); % 區(qū)域標(biāo)記
[rr,cc] = find(LL == 1);%調(diào)用標(biāo)記區(qū)域


MINN1=min(rr)+MIN1;    %橫最小
MINN2=min(cc)+MIN2;    %縱最小

aaaaa(3,:)=[MINN1;MINN2];       %左上點(diǎn)坐標(biāo)
bbbbb(3,:)=[MINN1+i1;MINN2];    %右上點(diǎn)坐標(biāo)
ccccc(3,:)=[MINN1;MINN2+i2];    %左下點(diǎn)坐標(biāo)
ddddd(3,:)=[MINN1+i1;MINN2+i2]; %右下點(diǎn)坐標(biāo)



hold on
plot([MINN1 MINN1+i1],[MINN2 MINN2],'m','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'m','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'m','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'m','LineWidth',2)
plot([MINN1 MINN1+i1],[MINN2 MINN2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'mo','LineWidth',2)

V1=0;
V2=0;
Q1=0;
Q2=0;
i1=0;
i2=0;
%44444444
[r,c] = find(L == 3);%調(diào)用標(biāo)記區(qū)域

MIN1 = min(c)-5;           %計(jì)算橫最小坐標(biāo)點(diǎn)
MIN2 = min(r)-5;           %計(jì)算縱最小坐標(biāo)點(diǎn)
MAX1 = max(c)+5;           %計(jì)算橫最大坐標(biāo)點(diǎn)
MAX2 = max(r)+5;           %計(jì)算縱最大坐標(biāo)點(diǎn)

%數(shù)值檢查,顯示初步框選區(qū)域
  if(MIN1 > 0)
      MMIN1=MIN1;
  else
      MMIN1 = 1;
end
if(MIN2 > 0)
  MMIN2=MIN2;
else
      MMIN2 = 1;
end
[mm nn] = size(i4);
if(MAX1 < nn)
      MMAX1=MAX1;
else
      MMAX1 = nn-1;
end
if(MAX2 < mm)
      MMAX2=MAX2;
else
      MMAX2 = mm-1;
end

cxk=i4(MMIN2:MMAX2,MMIN1:MMAX1); %將初步框選區(qū)域保存
% figure,imshow(1-cxk);           %顯示初步框選區(qū)域
  %邊緣檢測(cè)
[BW1,thresh1]=edge(cxk,'roberts');  %Roberts邊緣算子
[BW2,thresh2]=edge(cxk,'sobel');    %Sobel邊緣算子
[BW3,thresh3]=edge(cxk,'prewitt');  %Prewitt邊緣算子
%subplot(2,2,1);
%imshow(cxk);           %顯示初步框選區(qū)域
%subplot(2,2,2);
%imshow(BW1);           %顯示Roberts邊緣算子結(jié)果
%subplot(2,2,3);
%imshow(BW2);           %顯示Sobel邊緣算子結(jié)果
%subplot(2,2,4);
%imshow(BW3);           %顯示Prewitt邊緣算子結(jié)果
CXKK=im2double(BW1);

%投影
im=CXKK;

[m n]=size(im); % m n分別為圖像的行 列數(shù)
% 進(jìn)行垂直投影
for y=1:n
     V1(y)=sum(im(1:m,y));
end
% 進(jìn)行水平投影
for x=1:m
   V2(x)=sum(im(x,:));
end
%投影結(jié)果
Q1=im2bw(V1);   %算長(zhǎng)
i1=sum(Q1,2);
Q2=im2bw(V2);   %算寬
i2=sum(Q2,2)-1;
%計(jì)算四點(diǎn)坐標(biāo)

[LL,num2]=bwlabel(BW1,8); % 區(qū)域標(biāo)記
[rr,cc] = find(LL == 1);%調(diào)用標(biāo)記區(qū)域


MINN1=MMIN1+min(cc);    %橫最小
MINN2=MMIN2+min(rr);    %縱最小

aaaaa(4,:)=[MINN1;MINN2];       %左上點(diǎn)坐標(biāo)
bbbbb(4,:)=[MINN1+i1;MINN2];    %右上點(diǎn)坐標(biāo)
ccccc(4,:)=[MINN1;MINN2+i2];    %左下點(diǎn)坐標(biāo)
ddddd(4,:)=[MINN1+i1;MINN2+i2]; %右下點(diǎn)坐標(biāo)



hold on
plot([MINN1 MINN1+i1],[MINN2 MINN2],'m','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'m','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'m','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'m','LineWidth',2)
plot([MINN1 MINN1+i1],[MINN2 MINN2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'mo','LineWidth',2)

V1=0;
V2=0;
Q1=0;
Q2=0;
i1=0;
i2=0;

%555555555555
[r,c] = find(L == 5);%調(diào)用標(biāo)記區(qū)域

MIN1 = min(c)-5;           %計(jì)算橫最小坐標(biāo)點(diǎn)
MIN2 = min(r)-5;           %計(jì)算縱最小坐標(biāo)點(diǎn)
MAX1 = max(c)+5;           %計(jì)算橫最大坐標(biāo)點(diǎn)
MAX2 = max(r)+5;           %計(jì)算縱最大坐標(biāo)點(diǎn)

%數(shù)值檢查,顯示初步框選區(qū)域
  if(MIN1 > 0)
      MMIN1=MIN1;
  else
      MMIN1 = 1;
end
if(MIN2 > 0)
  MMIN2=MIN2;
else
      MMIN2 = 1;
end
[mm nn] = size(i4);
if(MAX1 < nn)
      MMAX1=MAX1;
else
      MMAX1 = nn-1;
end
if(MAX2 < mm)
      MMAX2=MAX2;
else
      MMAX2 = mm-1;
end

cxk=i4(MMIN2:MMAX2,MMIN1:MMAX1); %將初步框選區(qū)域保存
%figure,imshow(1-cxk);           %顯示初步框選區(qū)域
  %邊緣檢測(cè)
[BW1,thresh1]=edge(cxk,'roberts');  %Roberts邊緣算子
[BW2,thresh2]=edge(cxk,'sobel');    %Sobel邊緣算子
[BW3,thresh3]=edge(cxk,'prewitt');  %Prewitt邊緣算子
%subplot(2,2,1);
%imshow(cxk);           %顯示初步框選區(qū)域
%subplot(2,2,2);
%imshow(BW1);           %顯示Roberts邊緣算子結(jié)果
%subplot(2,2,3);
%imshow(BW2);           %顯示Sobel邊緣算子結(jié)果
%subplot(2,2,4);
%imshow(BW3);           %顯示Prewitt邊緣算子結(jié)果
CXKK=im2double(BW1);

%投影
im=CXKK;

[m n]=size(im); % m n分別為圖像的行 列數(shù)
% 進(jìn)行垂直投影
for y=1:n
     V1(y)=sum(im(1:m,y));
end
% 進(jìn)行水平投影
for x=1:m
   V2(x)=sum(im(x,:));
end
%投影結(jié)果
Q1=im2bw(V1);   %算長(zhǎng)
i1=sum(Q1,2)-1;
Q2=im2bw(V2);   %算寬
i2=sum(Q2,2);
%計(jì)算四點(diǎn)坐標(biāo)

[LL,num2]=bwlabel(BW1,8); % 區(qū)域標(biāo)記
[rr,cc] = find(LL == 1);%調(diào)用標(biāo)記區(qū)域


MINN1=min(cc)+MMIN1;    %橫最小
MINN2=min(rr)+MMIN2;    %縱最小

aaaaa(5,:)=[MINN1;MINN2];       %左上點(diǎn)坐標(biāo)
bbbbb(5,:)=[MINN1+i1;MINN2];    %右上點(diǎn)坐標(biāo)
ccccc(5,:)=[MINN1;MINN2+i2];    %左下點(diǎn)坐標(biāo)
ddddd(5,:)=[MINN1+i1;MINN2+i2]; %右下點(diǎn)坐標(biāo)


hold on
plot([MINN1 MINN1+i1],[MINN2 MINN2],'m','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'m','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'m','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'m','LineWidth',2)
plot([MINN1 MINN1+i1],[MINN2 MINN2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1+i1],[MINN2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1+i1 MINN1],[MINN2+i2 MINN2+i2],'mo','LineWidth',2)
plot([MINN1 MINN1],[MINN2+i2 MINN2],'mo','LineWidth',2)
hold off


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表