Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2013-01-09
帖子: 1
声望力: 0 ![]() |
![]()
各位好,最近在用tophat作图像增强,看了下原理,还蛮简单的,但是在实现多尺度tophat上面遇到些问题,还望高手指点一下。
单尺度tophat和多尺度tophat我都做了,但是可能因为我的实现上面有些问题,导致我的多尺度tophat的增强效果几乎和单尺度的没多大差别,有时候甚至还不如单尺度的,而且运行时间上明显增加,我参考的文献是【Peihe Tang, Hao Liu, Kaiqiong Sun. Enhancement of coronary angiogram by estimation of local background】,附件是我的代码,顺便贴出来一下。 这个我已经折腾蛮久了,真心希望有高手指点一下哈,谢谢了。 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Single scale enhancement for pre-observation. se = strel('disk', 11); res = imtophat(Iori,se); res=imadjust(res,stretchlim(res),[0 1]); figure; subplot(1,3,1); imshow(Iori); title('Original Image'); subplot(1,3,2); imshow(Open_res); title('Background Estimation using Single Scale'); subplot(1,3,3); imshow(res); title('Top-hat Result using Single Scale'); %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Multiscale enhancement. [nrow,ncol]=size(Iori); % Construct different Structure Elements(SE). se1=strel('disk',1); se2=strel('disk',3); se3=strel('disk',5); se4=strel('disk',7); se5=strel('disk',9); se6=strel('disk',11); % Opening operators. Img=double(Iori); Open0=Img; Open1=imopen(Img,se1); Open2=imopen(Img,se2); Open3=imopen(Img,se3); Open4=imopen(Img,se4); Open5=imopen(Img,se5); Open6=imopen(Img,se6); % % Reconstruct % Open1=imreconstruct(Open1,Img); Open2=imreconstruct(Open2,Img); Open3=imreconstruct(Open3,Img); % Open4=imreconstruct(Open4,Img); Open5=imreconstruct(Open5,Img); Open6=imreconstruct(Open6,Img); % % Difference between two adjacent opening results. DI0=Open0-Open1; DI1=Open1-Open2; DI2=Open2-Open3; DI3=Open3-Open4; DI4=Open4-Open5; DI5=Open5-Open6; % DI0=Open0.*Open1; DI1=Open1.*Open2; DI2=Open2.*Open3; % DI3=Open3.*Open4; DI4=Open4.*Open5; DI5=Open5.*Open6; % DI0=Open1-Open0; DI1=Open2-Open0; DI2=Open3-Open0; % DI3=Open4-Open0; DI4=Open5-Open0; DI5=Open6-Open0; % search max abs (DD) and order num (ind) % % chosen 1 : only one scale according to maximum difference % ----------------------------------------------------------- bInd=ones(nrow,ncol); DD=DI0; ind0 = bInd; KK=DI1>=DD; ind1 = bInd.*double(KK) + double(KK); bInd = bInd + 1; DD=max(DD,DI1); KK=DI2>=DD; ind2 = bInd.*double(KK) + double(KK); bInd = bInd + 1; DD=max(DD,DI2); KK=DI3>=DD; ind3 = bInd.*double(KK) + double(KK); bInd = bInd + 1; DD=max(DD,DI3); KK=DI4>=DD; ind4 = bInd.*double(KK) + double(KK); bInd = bInd + 1; DD=max(DD,DI4); KK=DI5>=DD; ind5 = bInd.*double(KK) + double(KK); bInd = bInd + 1; DD=max(DD,DI5); ind=max(ind0,ind1);ind=max(ind,ind2); ind=max(ind,ind3); ind=max(ind,ind4); ind=max(ind,ind5); %% %Multi-scale opening for background estimation and enhancement bk=zeros(nrow,ncol); % background kk=zeros(nrow,ncol); for i=1:nrow for j=1:ncol if ind(i,j)==0 bk(i,j) = Open0(i,j); end if ind(i,j)==1 bk(i,j) = Open1(i,j); end if ind(i,j)==2 bk(i,j) = Open2(i,j); end if ind(i,j)==3 bk(i,j) = Open3(i,j); end if ind(i,j)==4 bk(i,j) = Open4(i,j); end if ind(i,j)==5 bk(i,j) = Open5(i,j); end if ind(i,j)==6 bk(i,j) = Open6(i,j); end end end figure; subplot(1,3,1);imshow(Iori); title('Original Image'); subplot(1,3,2);imshow(bk,[]);title('Multiscale background estimation'); kk=Img-bk; I2=uint8(kk-1); I3=imadjust(I2,stretchlim(I2),[0 1]); subplot(1,3,3);imshow(I3);title('Multiscale top-hat result'); % imwrite(I3,'img002enResult005.bmp'); |
![]() |
![]() |