Nowadays with the fast pace of internet growth and more communications among people we see that the security of information exchange has become an important issue. Use of cryptography can provide high levels of security but the characteristics of the encrypted message can cause problems and provoke unauthorized access. Therefore, there is a demand for means of communications with higher levels of security than cryptography. One of the suggested secure means of information exchange is steganography. This is an art and science of covert communication. The main goal of steganography is to establish communications without anyone suspecting the existence of the link. With all the efforts that is spent in designing a steganographic algorithm, the process of data hiding creates detectable effects in the cover medium which alters the statistical and visual characteristics of the medium. These effects in turn provoke suspicions of the enemy and hence, efforts are initiated to reveal the secret message. Consequently, next to steganography methods there are the so called steganalysis algorithms. Some of these steganalysis algorithms are devised to attack one specific data hiding method. On the other hand, there are methods that use a set of extracted characteristics from the cover and stego media to detect the existence of the hidden data regardless of the applied steganography method. In this research we showed that the slightest alterations to the smooth regions in a stego image can reveal the existence of hidden data. Hence, it is required to perform the hiding in the complex regions of an image. To prove this claim steganography was performed in halftone images as well as in grayscale ones. For each type of image a different algorithm is offered. Each of the suggested algorithms is independent of the other but both are based on the complexity issue. In other words, these algorithms perform the data hiding only in the complex regions of an image and both are capable of correctly extracting the hidden data. The suggested algorithms are tested against a number of known steganalysis algorithms. The implementation results and our experiments prove the functionality and correctness of these methods.