In the first example, image is filled with primary colors (RGB). So I am finding the sum of the values in the pixel position. If the sum is greater than zero then the value will be 1(white) otherwise zero (black).
In the second example, the following steps are needed to convert a RGB
image to binary image.
- Convert the RGB image into grayscale image.
- Find the threshold value. If the value at the pixel position is greater than the threshold value then the value will be 1(white) else zero (black).
function mybinaryglobal GIm T1;A=imread('shapes.bmp');figure,imshow(A);title('Original image');B=zeros(size(A,1),size(A,2));for l=1:size(A,1)for m=1:size(A,2)if(sum(A(l,m,:))>0)B(l,m)=1;endendendB=logical(B);figure,imshow(B);Im=imread('gantrycrane.png');figure,imshow(Im);title('Original Image');%0.2989 * R + 0.5870 * G + 0.1140 * BGIm=uint8(zeros(size(Im,1),size(Im,2)));for m=1:size(Im,1)for n=1:size(Im,2)GIm(m,n)=0.2989*Im(m,n,1)+0.5870*Im(m,n,2)+0.1140*Im(m,n,3);endendwe can perform the grayscale conversion without using the for loop:
%GIm=0.2989*Im(:,:,1)+0.5870*Im(:,:,2)+0.1140*Im(:,:,3);
ssz = get(0,'ScreenSize');T.fg=figure('Visible','on','Name','IMAGE THRESHOLDING','NumberTitle','off','Position', ssz);T.holder=axes('units','pixels','Position',[ssz(3)/35 ssz(4)/4 ssz(3)-(ssz(3)/3) ssz(4)-(ssz(4)/3)]);imshow(GIm);set(T.holder,'xtick',[],'ytick',[])T.slid=uicontrol('Style','Slider','Visible','on','Value',1,'Max',255,'Min',0,'Sliderstep',[1 1],'Position',[ssz(3)/35 ssz(4)/5 ssz(3)-(ssz(3)/3) 20],'Callback', @tresher);T.ent=uicontrol('Style','pushbutton','Visible','on','String','THRESHOLD VALUE','Position',[ssz(3)-(ssz(3)/4) ssz(4)-(ssz(4)/8) 105 30]);T.ed=uicontrol('Style','edit','Visible','on','String','0','Value',1,'Position',[ssz(3)-(ssz(3)/4) ssz(4)-(ssz(4)/6) 90 20]);function tresher(object,~)val=get(object,'value');in=GIm;T1=Imthreshold1(in,val);T.view1=imshow(T1);set(T.holder,'xtick',[],'ytick',[])set(T.ed,'String',val);end
function Im=Imthreshold1(Image,Tvalue)sz=size(Image);mybin=zeros(size(Image));for i=1:sz(1)for j=1:sz(2)if(Image(i,j)>Tvalue)mybin(i,j)=1;endendend
Instead of this for loop, the equivalent one line code is:
%mybin(find(Image>Tvalue))=1;Explanation:The output of find(Image>Tvalue) will be the values that are greater than Tvalue.For instance,consider a matrix,>> A=[1,2,3,4;2,4,6,8;3,6,9,12];>> AA =1 2 3 42 4 6 83 6 9 12>> find(mod(A,2)==0)ans =24568101112Im=logical(mybin);endend
2 comments:
Nice article..
join www.facebook.com/code2learn..
@yigermal semahegn
would u help me to write a matlab programm
without using inbuilt function for image processing
a) to convert into binary image
b) to generate -ve of an image
c) to adjust gamma of an image
thank you for ur contributions !!!
Enjoyed Reading? Share Your Views